Short Example:
<div data-bind="foreach: firstArray">
<span data-bind="text: title"></span>
<input type="checkbox" data-bind="click: $parent.delete"/>
</div>
<div data-bind="foreach: secArray">
<span data-bind="text: title"></span>
<input type="checkbox" data-bind="click: $parent.delete"/>
</div>
[...]
self.firstArray = ko.observableArray([]);
self.delete = function (item, event) {
self.firstArray.remove(item);
}
[...]
问题:我有 2 个数组,它们都使用相同的函数,我想知道项目来自哪里(来自 first 或 secArray(。
你只需要将数组传递给你的删除函数。喜欢:
<div data-bind="foreach: firstArray">
<span data-bind="text: title"></span>
<input type="checkbox" data-bind="click: $parent.delete.bind($data, $parent.firstArray)"/>
</div>
您的视图模型应该知道您传递了函数,并且this
是您当前的项目。
self.firstArray = ko.observableArray([]);
self.delete = function (array) {
array.remove(this);
}
您可以在此处阅读有关单击绑定的更多信息。它在那里说明了如何传递参数。
为什么你不有两个函数?
<div data-bind="foreach: firstArray">
<span data-bind="text: title"></span>
<input type="checkbox" data-bind="click: $parent.deleteFromFirst"/>
</div>
<div data-bind="foreach: secArray">
<span data-bind="text: title"></span>
<input type="checkbox" data-bind="click: $parent.deleteFromSecond"/>
</div>
[...]
self.firstArray = ko.observableArray([]);
self.deleteFromFirst = function (item, event) {
self.firstArray.remove(item);
}
self.secArray = ko.observableArray([]);
self.deleteFromSecond = function (item, event) {
self.secArray.remove(item);
}
[...]