Kendo 树视图源绑定
Kendo Tree View source binding
我需要将下面的 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
(上面的 link 对我没用,因为这里源直接在模型 属性 中而不是列表)
我从 Telerik 那里得到了答案
经过进一步调查,我们得出的结论是不支持所需的场景。
为了解释这种情况下发生的情况,我需要更清楚地说明 MVVM 源代码绑定的工作原理。基本上,它会监听其中发生的任何变化(在本例中为 "dynamicFields")。如果它检测到变化,那么它将重新生成呈现的内容,这将导致重新创建 TreeView。
"dynamicFields" 中的更改来自内置 TreeView 行为以更新其源的 "expanded" 字段。此操作将触发更改,它将冒泡到 "dynamicFields",结果为 "infinitive loop"。
在这种情况下,唯一的解决方法是不对 TreeView 使用源绑定。检查有效的更新演示:
http://dojo.telerik.com/IWAmo
我需要将下面的 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
(上面的 link 对我没用,因为这里源直接在模型 属性 中而不是列表)
我从 Telerik 那里得到了答案
经过进一步调查,我们得出的结论是不支持所需的场景。 为了解释这种情况下发生的情况,我需要更清楚地说明 MVVM 源代码绑定的工作原理。基本上,它会监听其中发生的任何变化(在本例中为 "dynamicFields")。如果它检测到变化,那么它将重新生成呈现的内容,这将导致重新创建 TreeView。
"dynamicFields" 中的更改来自内置 TreeView 行为以更新其源的 "expanded" 字段。此操作将触发更改,它将冒泡到 "dynamicFields",结果为 "infinitive loop"。
在这种情况下,唯一的解决方法是不对 TreeView 使用源绑定。检查有效的更新演示: http://dojo.telerik.com/IWAmo