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"}