Knockout.js:访问data-bind事件中的父集合

时间:2012-12-27 20:55:22

标签: javascript knockout.js

假设我有一个

<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的帮助下偶尔也会从服务器更新视图模型,但这不会为新数据添加任何方法。这就是我单独实现处理程序的原因。

2 个答案:

答案 0 :(得分: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
}
}

答案 1 :(得分:0)

目前无法实现。

我为此提出了一个新的淘汰赛问题(目前已开放):
Allow access to the current array through the binding context

也相关:Support for $last in foreach