假设我有
<button type="button" data-bind="click: actions.remove">×</button>
和一个处理程序
var actions = {
remove: function(item) {
?array?.remove(item); // ?array? is a containing array, accessed somehow
}
}
如何找到?array?
,以便在任何foreach
绑定中使用相同的button
?
澄清:
如果我将remove
放入视图模型,我知道该怎么做。但是,视图模型包含层次阵列,我真的不想只是为了在正确的位置获取方法。查看模型还偶尔会借助ko.mapping
从服务器更新,但这并未在新数据中添加任何方法。这就是为什么我分别实施处理程序。
您尝试这样的事情。
<div data-bind="foreach: someArray">
<button type="button" data-bind="click: $parent.actions.remove">x</button>
</div>
//Inside your viewmodel.
var self = this;
self.someArray = ko.observableArray();
self.actions = {
remove: function() {
self.someArray.remove(this); // ?array? is a containing array, accessed somehow
}
}
编辑:对不起,我误读了您的意思。您可以尝试这样的事情,使其适合任何绑定。
<div data-bind="foreach: someArray">
<button type="button" data-bind="click: function() {$parent.actions.remove($parent.someArray(), $data}">x</button>
</div>
//Inside your viewmodel.
var self = this;
self.someArray = ko.observableArray();
self.actions = {
remove: function(arr, item) {
arr.remove(item); // ?array? is a containing array, accessed somehow
}
}
目前是不可能的。
我提出了一个新的淘汰问题(当前开放):
允许通过绑定上下文访问当前数组。
也相关:支持$ last in foreach。