【问题标题】:Kendo UI for loop in grid column template causing infinite loop网格列模板中的 Kendo UI for 循环导致无限循环
【发布时间】:2014-08-28 07:07:55
【问题描述】:

我有一个 ajax 绑定的 Kendo UI 网格,我正在使用类似代码在客户端模板中构建一个选择列表-

<select name='@propertyName' required='@required'>
# for (var t = 0, length = 7; t < length; t++) { 
console.log(t); 
} #</select>

这显然不是完成的模板,而是一个精简的测试用例,用于修复导致浏览器选项卡崩溃(和/或被选项卡管理器捕获并停止 - 取决于在使用的浏览器上)。控制台中显示的“t”的值将继续无限增加,即使使用硬编码的长度值,如此处所示。

字符串作为 C# 字符串分配给 BoundColumnContainer 内的 ColumnSettings ClientTemplate 字符串属性(因为我们需要根据用户偏好对网格列进行排序)。它是在赋值之后和方法退出时(返回一个 Kendo UI GridBuilder 对象)完好无损(使用 ++)。

问题似乎是当模板被解码时,加号运算符在客户端被剥离,留下代码-

<select name='TemplateId'>
# for (var t = 0, length = 7; t < length; t  ) { 
console.log(t); 
} #</select>

这是在脚本停止响应(未能及时退出循环)停止脚本后,使用 Firefox 开发工具从列对象中提取的。

显然,缺少的加号不会增加变量,这将导致循环永远不会退出,这与这里发生的情况一致。 Fiddler trace中的编码模板如下-

{"title":"Template","width":"166px","template":"\u003cselect 
name=\u0027TemplateId\u0027\u003e# for (var t = 0, length = 7; t \u003c length; 
t  ) { console.log(t); } #\u003c/select\u003e",
"field":"TemplateId","filterable":{},"encoded":true}

请注意,这里 已经缺少 ++。

谁能建议我如何在模板中包含 ++ 而不会在编码过程中将其删除?

对于奖励积分,为什么 似乎 t 变量在 console.logging 循环内时正在递增?

【问题讨论】:

  • 对于那些可能希望提出明显(和明智的问题)的人,t = t + 1 被呈现为 t = t 1,因此不提供解决方法。

标签: javascript kendo-ui asp.net-mvc-5 kendo-grid kendo-asp.net-mvc


【解决方案1】:

我找到了解决办法。只需在别处定义一个 Javascript 函数:

function increment(n) {
    return n + 1;
}

然后在你的模板中使用它:

# for (var i = 0; i < data.Componenten.length; i = increment(i)) { #

这当然很荒谬,但这是唯一的方法。

【讨论】:

    猜你喜欢
    • 2021-10-30
    • 2017-05-02
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多