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