Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在剑道UI上设置“this”的范围';自动完成模板?_Javascript_Jquery_Kendo Ui_Kendo Template_Kendo Autocomplete - Fatal编程技术网

Javascript 如何在剑道UI上设置“this”的范围';自动完成模板?

Javascript 如何在剑道UI上设置“this”的范围';自动完成模板?,javascript,jquery,kendo-ui,kendo-template,kendo-autocomplete,Javascript,Jquery,Kendo Ui,Kendo Template,Kendo Autocomplete,剑道UI允许您在模板中使用JavaScript。这有助于自定义 当生成的代码运行时,此的作用域为。我想将范围设置为autocomplete实例,例如,使用\u prev值自定义结果 在此情况下,要将与搜索文本等效的子字符串上客户姓名的颜色更改为红色,可以在模板中搜索自动完成实例。对于给定的示例,只需将模板属性更改为 template: '<span class="k-state-default"><img src= \"../content/web/Customer

剑道UI允许您在
模板中使用
JavaScript
。这有助于自定义

当生成的代码运行时,
的作用域为。我想将范围设置为autocomplete实例,例如,使用
\u prev
值自定义结果

在此情况下,要将与搜索文本等效的
子字符串上客户姓名的
颜色更改为红色,可以在
模板中搜索
自动完成
实例。对于给定的示例,只需将
模板
属性更改为

 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>',
模板:
'' +
''+
“#var searchText=$(“\\\\客户”).data(“kendoAutoComplete”)。#u prev;#”+
“#data.coloredName=”+
'""  '   +
“+data.ContactName.substring(0,searchText.length)+”+
““”+data.ContactName.substring(searchText.length);#”+
“#=data.coloredName”+
“:data.CompanyName

”+ '',
但是,如果我不能使用
$()
“搜索”,我希望通过设置模板生成的函数的范围来实现。有可能吗?

有可能:

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
});
()


请注意,您在上下文中拥有的任何属性都将被传递到模板的数据覆盖,因此您无法从外部作用域访问这些属性(请参见模板函数的结构)。

除非您完全负责调用代码,
将是任何内容。您最好的办法可能是在您试图编写的代码范围内的某个地方保留对autocomplete实例的引用。保留对
窗口
对象的引用是不可取的,因为我的案例是一个可重用组件。我不明白。我没有提到
窗口
对象。默认情况下,
的范围是
窗口
对象,在模板生成的代码执行过程中唯一可用的对象是
数据
,它引用自动完成
数据源
的每个项。它们都不是存储对
autocomplete
实例引用的好地方。我认为您误解了术语“scope”,它不是“this”的同义词。无论如何,我不会费劲,因为你已经接受了一个大致与我想法一致的答案。我基于你的解决方案,从
这个
引用的
自动完成
对象中获取搜索文本,而不是
$(“\\\\客户”).data(“kendoAutoComplete”)
。但你的解决方案是正确的。谢谢对,我没注意,;很高兴我能帮忙