我需要将下面的Json绑定到MVVM
model ={
"dynamicFields":[
{
"name":"A1",
"type":"LookUp",
"required":true,
"list":[
{
"Id":"f3373d59-27f2-4f4a-b9e4-9fd3ad468d6f",
"Name":"FruitItem1",
"expanded":false,
"items":[
],
"IsActive":true
},
{
"Id":"feb67602-5f45-4fcd-857a-a26570144dff",
"Name":"FruitItem2",
"expanded":true,
"items":[
{
"Id":"16cf25ba-3c8b-4fa2-ad33-aaac242a0fa4",
"Name":"FruitItem3",
"expanded":false,
"items":[ ],
"IsActive":true
}
],
"IsActive":true
}
],
"IsMultiSelect":true,
"IsMultiLevel":true
}
],
"ResourceId":"6fa1c8ce-98f7-40e6-bdac-f2770b9f4ef4",
"ProjectId":null
}
所以我按照以下方式转换这个Json
model.dynamicFields.forEach(function (item) {
item.list = kendo.observableHierarchy(item.list);
});
var viewModel = kendo.observable(model);
现在我绑定到模板
kendo.bind($("#customfield"), viewModel);
模板如下
<script id="fieldsTemplate" type="text/x-kendo-template">
<tr>
<td>
<div data-role="treeview"
data-text-field="Name"
data-bind="source: list"></div>
</td>
</tr>
现在树视图崩溃并且内存不足
如果我从模型中删除展开的属性,则树视图会出现,但不会扩展到子项目。
我该如何解决这个问题?
http://demos.telerik.com/kendo-ui/treeview/mvvm
(上面的链接对我没用,因为这里的source直接在模型属性中而不是列表中)
答案 0 :(得分:0)
我得到了Telerik的回答
经过进一步调查,我们得出的结论是,不支持所需的方案。 为了解释在这种情况下会发生什么,我需要更多地阐明MVVM源绑定是如何工作的。基本上,它会监听其中发生的任何更改(在本例中为&#34; dynamicFields&#34;)。如果它检测到更改,那么它将重新生成呈现的内容,这将导致重新创建TreeView。
&#34; dynamicFields&#34;来自内置的TreeView行为来更新&#34;扩展&#34;它的来源领域。此操作将触发更改,该更改将冒泡到&#34; dynamicFields&#34;结果是&#34;不定式循环&#34;。
在这种情况下,唯一的解决方法是不对TreeView使用源绑定。检查有效的更新演示: http://dojo.telerik.com/IWAmo