【发布时间】:2014-02-21 18:57:40
【问题描述】:
背景故事
我正在使用 AngularJS/KendoUI 并使用 angular-kendo-ui 作为两者之间的“桥梁”。我正在使用 Kendo 作为它的树视图组件,这部分是客户的要求。
我需要完成的是
1. 根据服务提供的数据绘制树形菜单
2. 定期检查此数据中的每个元素,并更新“禁用”属性
3. 根据上述步骤的结果在树视图中重绘元素。
假设
1.如果我想能够更新剑道树视图,那么我需要使用剑道的observables
2.我这里可能用错了Kendo的ObservableArray。
问题
如果我像这样创建一个新的 ObservableArray
var things = new kendo.data.ObservableArray([{
text: "Parent 1",
items: [{text: "Child 1"}, {text: "Child 2"}, {text: "Child 3"}]
}])
things 被记录到console 并且结构是完整的。
但是,一旦使用此数据实例化树视图,将things 进一步记录到控制台会显示子项(项目)不再存在。如果子项不存在,则很难迭代和更新它们!
Plunker http://plnkr.co/edit/qJpIvK?p=info,如果你查看“script.js”文件并打开控制台,你应该可以看到我的问题。
这里是代码
HTML
<div ng-app="MyApp">
<div ng-controller="TreeController">
<div kendo-tree-view k-options="thingsOptions"></div>
</div>
</div>
JS
var app = angular.module("MyApp", ["kendo.directives"]);
app.controller('TreeController', function($scope, $timeout) {
var things = new kendo.data.ObservableArray([{
text: "Parent 1",
items: [{
text: "Child 1"
}, {
text: "Child 2"
}, {
text: "Child 3"
}]
}, {
text: "Parent 2",
items: [{
text: "Child 1"
}, {
text: "Child 2"
}, {
text: "Child 3"
}]
}]);
// should have 3 items
console.log('preTreeView init', things[1].items);
$scope.thingsOptions = {
dataSource: things
};
$timeout(function() {
// the 3 items expected are gone, why?
console.log('postTreeView init', things[1].items);
}, 1000);
});
这是对 ObservableArray 的滥用吗?如果是,正确的做法是什么?
【问题讨论】:
标签: javascript kendo-ui kendo-treeview