我使用流畅的网格构建器构建了一个Kendo网格。在我的一个客户端模板中,我需要迭代正在返回的集合。这是可疑线:
c.Bound(x => x.EventFormats).Width(300).ClientTemplate("# if(EventFormats != undefined && EventFormats.length > 0){ for(var formatIndex=0; formatIndex < EventFormats.length; formatIndex++){ console.log(i) } } #").EditorTemplateName("Formats");
问题在于,当我引入for
循环时,所有地狱都会破裂并且循环数十万次(在300k之后我放弃并杀死了这个过程)。
如果我这样做:
c.Bound(x => x.EventFormats).Width(300).ClientTemplate("# if(EventFormats != undefined && EventFormats.length > 0){ console.log(EventFormats.length) } #").EditorTemplateName("Formats");
它正确地返回了我在集合中期待的项目数。只有4个正在返回的记录将以集合开头,并且任何集合中的最大项目数为2(尽管可能更多)。
当我介绍for循环时,我不确定为什么它会失去它,并且非常感谢任何见解。
以下是生成的JSON对象:
[{
"Id":85,
"FormatTypeId":34,
"Name":"35mm",
"Created":"/Date(1447265241983)/",
"CreatedBy":"system",
"Modified":null,
"ModifiedBy":null,
"FormatType":null
},
{
"Id":83,
"FormatTypeId":34,
"Name":"16mm",
"Created":"/Date(1447265241737)/",
"CreatedBy":"system",
"Modified":"/Date(1453243258067)/",
"ModifiedBy":"system",
"FormatType":null
}]
答案 0 :(得分:0)
我不完全确定为什么它循环300k +次,但我确实提出了一个可行的解决方案。
我的KendoGrid模板现在有这一行:
c.Bound(x => x.Formats).Width(300).ClientTemplate("#=$.generateFormatList(Formats)#");
然后在我的JS文件中,我只是写了generateFormatList
函数:
$.generateFormatList = function (formats) {
var template = '';
if (formats != null) {
for (var i = 0; i < formats.length; i++) {
if (i !== 0) {
template += ", ";
}
template += formats[i].Name;
}
}
return template;
}
这就像一个冠军。不确定为什么,但显然Kendo无法在for
内部处理ClientTemplate
循环。