Предыстория
Я использую AngularJS/KendoUI и использую angular-kendo-ui в качестве «моста» между ними. Я использую Kendo для его компонента просмотра дерева, и эта часть является требованием клиента.
Что мне нужно сделать, так это
1. нарисовать древовидное меню из данных, предоставленных службой
2. периодически проверять каждый элемент в этих данных и обновлять «отключенный» реквизит
3. перерисовывать элементы в древовидное представление на основе результатов предыдущего шага.
Предположения
1. Если я хочу иметь возможность обновлять представление дерева кендо, мне нужно использовать наблюдаемые объекты кендо
2. Возможно, здесь я неправильно использую ObservableArray кендо.
Проблема
Если я создам новый ObservableArray вот так
var things = new kendo.data.ObservableArray([{
text: "Parent 1",
items: [{text: "Child 1"}, {text: "Child 2"}, {text: "Child 3"}]
}])
things
быть зарегистрированным в console
и структура не повреждена. Однако, как только древовидная структура создается с этими данными, дальнейшая регистрация things
в консоли показывает, что дочерние элементы (элементы) больше не присутствуют. Очень сложно перебирать и обновлять дочерние элементы, если они не существуют!
Загрузите сюда 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, и если да, то каков правильный подход?