执行什么范围的kendo模板?

时间:2015-01-29 23:07:45

标签: javascript kendo-ui

我有一个像这样的剑道模板:

<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函数放在全局范围内,我显然希望避免这种情况。我在哪里可以定义这个函数,以便在编译模板时可以使用它(除了全局范围)?

同样的问题适用于editTemplatedelTemplate,这些问题目前也是全局定义的,因此模板可以看到它们。

WhenDateActivityDescription都是来自kendo网格绑定的数据源的实体的属性。

以下是javascript中引用tempalate的方法:

$("#grid").kendoGrid({
    rowTemplate: kendo.template($("#rowTemplate").html()),
    ....

2 个答案:

答案 0 :(得分:2)

您可以在控制台中使用此代码自行测试:

kendo.template('#debugger#')({x:1});

然后你的浏览器应该进入已编译的模板函数,如下所示:

(function(data
/**/) {
var o,e=kendo.htmlEncode;with(data){o='';debugger;o+='';}return o;
})

模板运行时,data是传入的对象{x:1}thiswindow


最简单的方法是让您的函数可以访问全局范围,但也可以将它放在命名空间对象中,例如app.utils.isButtonShown

虽然可以理解你可能不想污染全球范围。传递给data的对象(网格中显示的项目)可能位于DataSource中,因此您可以反复调用.parent()来遍历可观察的层次结构。这可能会让您到可以添加功能的地方。

答案 1 :(得分:0)

我不确定除了将其置于全球范围之外是否可行。

您是否可以在将数据绑定到网格之前循环浏览数据并设置属性“isButtonShown&#39;根据活动?那么只需要检查模板中的属性而不是调用函数。