在完成淘汰教程working with lists and collections之后,我决定进一步实施两级挖掘与淘汰赛。
我的ViewModel的结构如下所示:
function ViewModel() {
this.elements = ko.observableArray([{
id: 1,
txt: 'first',
el: ko.observableArray(['first', 'second'])
},{
id: 2,
txt: 'second',
el: ko.observableArray(['first', 'third'])
},{
id: 3,
txt: 'third',
el: ko.observableArray(['fourth', 'fifth'])
}]);
this.remove = function(el){
console.log(el);
}
}
所以这就像可观察数组中的Observable数组。我输出的是一个简单的2 foreach视图绑定:
<div data-bind="foreach: elements">
<span data-bind="text: txt"></span>
<ul data-bind="foreach: el">
<li data-bind="text: $data, click: $root.remove">
</ul>
</div>
问题在于删除语句(full code is in the fiddle)。到目前为止,我没有删除元素。函数只给我我要删除的元素的值,如first
,这不足以唯一地标识我需要删除的内容(这是第一个数组中的第一个或第二个数组)。
那么有没有办法从observableArray中的observableArray中正确删除元素?
答案 0 :(得分:6)
您可以像$parent
那样additional arguments to the click
handler传递parent context:
<li data-bind="text: $data, click: function() { $root.remove($data, $parent) }"/>
然后在remove
中,您可以通过第二个参数访问父集合,并从中删除当前元素:
this.remove = function(data, parent){
parent.el.remove(data);
}
演示JSFiddle。