我使用以下代码在knockout.js中创建一个具有多级数据的树。
<ul data-bind="template: { name: 'itemTmpl', foreach: $data.items }"></ul>
<script id="itemTmpl" type="text/html">
<li>
<span data-bind="text: name"></span>
<input type='checkbox'>
<ul data-bind="template: { name: 'itemTmpl', foreach: $data.items }">
</ul>
</li>
</script>
但是现在我想在淘汰赛中扩展这种方式,如果我检查了父母,那么所有的孩子都被选中,如果取消选中父母的孩子就取消选中。
Here is js fiddle link
答案 0 :(得分:1)
我制作了一个不会改变原始数据但使用KO映射的版本。
我还采用了机会来显示使用我的约会库编写的代码少了多少
MyApp.TreeViewModel = function(data) {
var mapping = {
items: {
create: function(options) {
return new MyApp.TreeViewModel(options.data);
}
}
};
this.checked = ko.observable(false);
this.checked.subscribe(this.onChecked, this);
this.items = ko.observableArray();
ko.mapping.fromJS(data, mapping, this);
};
MyApp.TreeViewModel.prototype = {
constructor: MyApp.TreeViewModel,
onChecked: function(checked) {
ko.utils.arrayForEach(this.items(), function(item) {
item.checked(checked);
});
}
};