Kendo Tree View源绑定

时间:2015-09-29 18:15:29

标签: json mvvm data-binding kendo-ui treeview

我需要将下面的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);

模板如下

enter image description here

<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直接在模型属性中而不是列表中)

1 个答案:

答案 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