如何在 Kendo UI 的自动完成模板上设置 `this` 的范围?
How to set the scope of `this`on Kendo UI's autocomplete template?
KendoUI的template API lets you use JavaScript
in the template
. This is useful to customize the autocomplete template。
当生成的代码运行时,this
的范围是Window object。我想将范围设置为自动完成实例,例如,使用 _prev
值来自定义结果。
在这个demo code上,要在substring
等同于搜索文字的color
上把客户名字的color
改成红色,可以搜索autocomplete
template
代码中的实例。在给定的示例中,只需将 template
属性 更改为
template:
'<span class="k-state-default"><img src= \"../content/web/Customers/#:data.CustomerID#.jpg\" alt=\"#:data.CustomerID#\" /></span>' +
'<span class="k-state-default">'+
'# var searchText= $("\#customers").data("kendoAutoComplete")._prev; #'+
'# data.coloredName= '+
'"<span style=\"color:red;\">" ' +
'+ data.ContactName.substring(0, searchText.length) +' +
'"</span>" + data.ContactName.substring(searchText.length); #'+
'<h3>#= data.coloredName #</h3>'+
'<p>#: data.CompanyName #</p>'+
'</span>',
但是,如果我不能使用 $()
"search",我想通过设置模板生成的函数的范围来实现。可能吗?
有可能:
var autocomplete = $("#customers").kendoAutoComplete({
// standard options, not the template
}).data("kendoAutoComplete");
var templateHtml = 'your template html using "this" here ...';
// compile the template from the html
var compiledTemplate = kendo.Template.compile(templateHtml);
// bind the template function to whatever you want, e.g. the autocomplete
var boundTemplate = compiledTemplate.bind(autocomplete);
// set the template on the widget
autocomplete.setOptions({
template: boundTemplate
});
(demo)
请注意,您在上下文中可能拥有的任何属性都将被传递给模板的数据覆盖,因此您无法从外部范围访问这些属性(请参阅模板函数的结构here).
KendoUI的template API lets you use JavaScript
in the template
. This is useful to customize the autocomplete template。
当生成的代码运行时,this
的范围是Window object。我想将范围设置为自动完成实例,例如,使用 _prev
值来自定义结果。
在这个demo code上,要在substring
等同于搜索文字的color
上把客户名字的color
改成红色,可以搜索autocomplete
template
代码中的实例。在给定的示例中,只需将 template
属性 更改为
template:
'<span class="k-state-default"><img src= \"../content/web/Customers/#:data.CustomerID#.jpg\" alt=\"#:data.CustomerID#\" /></span>' +
'<span class="k-state-default">'+
'# var searchText= $("\#customers").data("kendoAutoComplete")._prev; #'+
'# data.coloredName= '+
'"<span style=\"color:red;\">" ' +
'+ data.ContactName.substring(0, searchText.length) +' +
'"</span>" + data.ContactName.substring(searchText.length); #'+
'<h3>#= data.coloredName #</h3>'+
'<p>#: data.CompanyName #</p>'+
'</span>',
但是,如果我不能使用 $()
"search",我想通过设置模板生成的函数的范围来实现。可能吗?
有可能:
var autocomplete = $("#customers").kendoAutoComplete({
// standard options, not the template
}).data("kendoAutoComplete");
var templateHtml = 'your template html using "this" here ...';
// compile the template from the html
var compiledTemplate = kendo.Template.compile(templateHtml);
// bind the template function to whatever you want, e.g. the autocomplete
var boundTemplate = compiledTemplate.bind(autocomplete);
// set the template on the widget
autocomplete.setOptions({
template: boundTemplate
});
(demo)
请注意,您在上下文中可能拥有的任何属性都将被传递给模板的数据覆盖,因此您无法从外部范围访问这些属性(请参阅模板函数的结构here).