我正在使用 RP Niemeyer 的 kendo-knockout 库。我在可观察到的淘汰赛中使用 dataSource 运行 kendoTreeView。
html:
<div id="main">
<div id="reportGrid" data-bind="kendoTreeView: { dataSource: treeViewDataSource }"> </div>
<button data-bind="click: addItem">Add</button>
</div>>
javascript:
var billingReportViewModel = ko.observable({
treeViewDataSource: ko.observableArray([{text: "Tea" },{ text: "Coffee" }]),
addItem : function () {
this.treeViewDataSource.push({text: "Water"});
alert(this.treeViewDataSource().length);
}
});
ko.applyBindings(billingReportViewModel);
当我单击添加按钮时,我正在向可观察数组添加一个新元素。该项目已添加,但视图未相应更新。
我正在按照这里的步骤操作:
Kendo-Knockout:使用带有 kendo 数据源的淘汰视图模型
难道我做错了什么?还是当前不支持此功能?如果是这样,我有什么选择?每次添加/删除/更新节点时,我都可以从 DOM 中删除树视图,然后使用新的数据源重新创建它。但我希望绑定能够工作或更灵活的解决方案。谢谢!
jsFiddle:
更新:
我还能够使用对小部件的引用来加载 treeView,如下所示:
html:
<div data-bind="kendoTreeView: { widget: myWidget}">
</div>
<button data-bind="click: initialize">Initialize</button>
javascript:
var ViewModel = function () {
this.initialize = function () {
var inline = new kendo.data.DataSource({
data: [
{ id: 1, text: "Tea", sprite: "icon-tea" },
{ id: 2, text: "Coffee", sprite: "icon-coffee" }
]
});
var widget = this.myWidget();
widget.setDataSource(inline);
};
//hold the widget
this.myWidget = ko.observable();
};
ko.applyBindings(new ViewModel());
使用这种方法,我想在树视图中添加、删除和更新项目。我正在考虑像操作inline
数据源这样的事情,我希望视图会相应地更新(类似于我上面原始帖子中可观察数据源的想法)。我怎样才能做到这一点 ?任何工作示例都会很棒!