Javascript 肯杜伊观察到孩子们被肯杜伊树视图殴打
背景故事Javascript 肯杜伊观察到孩子们被肯杜伊树视图殴打,javascript,kendo-ui,kendo-treeview,Javascript,Kendo Ui,Kendo Treeview,背景故事 我使用AngularJS/KendoUI,并使用AngularKendo ui作为两者之间的“桥梁”。我使用剑道作为它的treeview组件,这是客户的要求 我需要完成的是 1.从服务提供的数据中绘制树菜单 2.定期检查此数据中的每个元素,并更新“禁用”属性 3.根据上述步骤的结果在树视图中重新绘制元素 假设 1.如果我想更新剑道树视图,那么我需要使用剑道的可观察性 2.我在这里可能用错了剑道 问题 如果我像这样创建一个新的ObservableArray var things =
我使用AngularJS/KendoUI,并使用AngularKendo ui作为两者之间的“桥梁”。我使用剑道作为它的treeview组件,这是客户的要求 我需要完成的是
1.从服务提供的数据中绘制树菜单
2.定期检查此数据中的每个元素,并更新“禁用”属性
3.根据上述步骤的结果在树视图中重新绘制元素 假设
1.如果我想更新剑道树视图,那么我需要使用剑道的可观察性
2.我在这里可能用错了剑道 问题
如果我像这样创建一个新的ObservableArray
var things = new kendo.data.ObservableArray([{
text: "Parent 1",
items: [{text: "Child 1"}, {text: "Child 2"}, {text: "Child 3"}]
}])
事件
将被记录到控制台
,并且结构完整。
但是,一旦使用此数据实例化了treeview,进一步将things
记录到控制台,则表明子项(项)不再存在。如果子对象不存在,则很难迭代和更新它们
在这里,如果您查看'script.js'文件并打开控制台,您应该能够看到我的问题
这是密码
HTML
<div ng-app="MyApp">
<div ng-controller="TreeController">
<div kendo-tree-view k-options="thingsOptions"></div>
</div>
</div>
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);
});
这是对Observerray的滥用吗?如果是,正确的方法是什么?在内部,TreeView小部件将您的
Observerray
转换为一个kendo.data.HierarchicalDataSource
,它将每个子对象移动到它们自己的DataSource
对象中
之后,您可以像这样导航它们:
var treeViewWidget = $(".k-treeview").data("kendoTreeView");
var dataSource = treeViewWidget.dataSource; // this is a HierachicalDataSource
var parents = dataSource.data(); // Parent1 and Parent2
var parent1 = parents[0];
var doesParent1HaveChildren = parent1.hasChildren; // true
var childrenDataSource = parent1.children; // this is a HierarchicalDataSource
var child1 = childrenDataSource.data()[0]; // this is {text: "Child 1"}