5

假设我有一个

<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?以便可以button在任何foreach绑定中使用相同的内容?

澄清:如果我放入视图模型
,我知道该怎么做。remove然而,视图模型包含分层数组,我真的不想为了在正确的位置获取方法而经历所有这些。视图模型有时也会在 的帮助下从服务器更新ko.mapping,但这不会向新数据添加任何方法。这就是我单独实现处理程序的原因。

4

2 回答 2

3

你试试这样的。

<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
}
}

编辑:对不起,我误解了你的意思。您可以尝试这样的事情,使其适用于任何 foreach 绑定。

<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
}
}
于 2012-12-27T21:23:13.903 回答
0

目前是不可能的。

我为此提出了一个新的淘汰赛问题(当前开放):
允许通过绑定上下文访问当前数组

同样相关:在 foreach 中支持 $last

于 2013-01-22T07:37:40.697 回答