在哪些范围内执行剑道模板
What scope kendo templates are executed in?
我有一个这样的剑道模板:
<script id="rowTemplate" type="text/x-kendo-tmpl">
<tr data-uid="#: uid #" role="row">
<td role="gridcell">#= kendo.toString(kendo.parseDate(WhenDate, 'yyyy-MM-dd'), 'dd MMM yyyy') #</td>
<td role="gridcell">#= Activity #</td>
<td role="gridcell">#= Description #</td>
<td role="gridcell">#if (isButtonShown(Activity)){# #= editTemplate # #}#</td>
<td role="gridcell">#if (isButtonShown(Activity)){# #= delTemplate # #}#</td>
</tr>
</script>
您可以看到它调用isButtonShown
函数。我能做到这一点的唯一方法是将isButtonShown
函数放在全局范围内,这显然是我想要避免的。在哪里可以定义此函数,以便在编译模板时可用(全局范围除外)?
同样的问题适用于editTemplate
和delTemplate
,它们目前也是全局定义的,因此它们对模板可见。
WhenDate
、Activity
和Description
都是来自剑道网格绑定到的数据源的实体的属性。
以下是 javascript 中引用 tempalate 的方式:
$("#grid").kendoGrid({
rowTemplate: kendo.template($("#rowTemplate").html()),
....
您可以在控制台中使用以下代码自行测试:
kendo.template('#debugger#')({x:1});
然后你的浏览器应该会进入编译的模板函数,它看起来像这样:
(function(data
/**/) {
var o,e=kendo.htmlEncode;with(data){o='';debugger;o+='';}return o;
})
当模板运行时,data
是传入的对象{x:1}
,this
是window
。
最简单的方法是使函数对全局范围可访问,但可以将其放在命名空间对象中,例如app.utils.isButtonShown
虽然可以理解,你可能不想污染全球范围。作为data
传入的对象(网格中显示的项)可能位于DataSource
中,因此您可以重复调用.parent()
以遍历可观察的层次结构。这可能会让你到达可以添加函数的地方。
除了将其置于全局范围内之外,我不确定这是否可能。
您能否在将数据绑定到网格之前循环访问数据,并根据活动设置属性"isButtonShow"?然后,只需检查模板中的属性,而不是调用函数即可。
相关文章:
- Angularjs无法将单选按钮与嵌套范围内的模型绑定
- 如何使用D3生成特定范围内的随机颜色
- 将自定义css保持在角度范围内
- Angular JS-文本框未在独立范围内更新
- cookie不在网站范围内
- 获取给定JavaScript范围内的解析函数
- 如何在JavaScript中使用此函数对范围内的所有数字求和
- JavaScript-仅验证数值并且在范围内
- JS:从数组中查找特定范围内的最低/最高数字
- 试图检查表单中的值是否为一个设定范围内的数字
- 在十进制范围内搜索
- 基于日期范围的一组日期范围内的天数
- webpack在全局范围内执行模块
- 隔离范围-仅在指令范围内定义的值必须执行更改
- 在全局范围内执行文件,而不是返回导出的对象
- 在哪些范围内执行剑道模板
- Firefox控制台错误:试图在清除的范围内运行编译并执行脚本
- 我怎么能得到注入javascript代码在iframe的局部范围内执行
- 在哪个范围内执行来自JQuery JSONP Ajax请求的回调?
- 如何使用编码模式/框架在try-catch块中执行每个Javascript函数(或范围内的函数)