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
ており、それに応じてビューが更新されることを願っています (上記の元の投稿からの観測可能なデータソースのアイデアのようなもの)。どうやってやるの ?どんな実例も素晴らしいでしょう!