使用 Knockoutjs ObservableArray 确定添加或删除了哪个元素 [英] Determine which element was added or removed with a Knockoutjs ObservableArray
问题描述
我需要弄清楚从我的 Knockout observableArray 中删除了哪个元素.请参阅我的 jsFiddle.
I need to figure out which element was removed from my Knockout observableArray. Please see my jsFiddle.
我可以订阅更改,但它只返回值,即添加或删除后的当前数组.
I can subscribe to the change, but it only returns value, which is the current array after the add or remove.
self.selectedDataPointOptions.subscribe(function(value) {
// how can I see which one was added or removed?
alert(value);
});
推荐答案
Knockout 包括 ko.utils.compareArrays
,您可以使用它来比较一个数组与另一个数组.这是一个辅助函数,用于通知数组中每个添加或删除的项目:
Knockout includes ko.utils.compareArrays
which you can use to compare one array to another. Here's a helper function that notifies for each added or removed item in the array:
ko.observableArray.fn.subscribeArrayChanged = function(addCallback, deleteCallback) {
var previousValue = undefined;
this.subscribe(function(_previousValue) {
previousValue = _previousValue.slice(0);
}, undefined, 'beforeChange');
this.subscribe(function(latestValue) {
var editScript = ko.utils.compareArrays(previousValue, latestValue);
for (var i = 0, j = editScript.length; i < j; i++) {
switch (editScript[i].status) {
case "retained":
break;
case "deleted":
if (deleteCallback)
deleteCallback(editScript[i].value);
break;
case "added":
if (addCallback)
addCallback(editScript[i].value);
break;
}
}
previousValue = undefined;
});
};
它正在运行:http://jsfiddle.net/mbest/Jq3ru/
从 Knockout 3.0 开始,您可以使用 arrayChange
事件更轻松地执行此操作.更多信息在这里:http://blog.stevensanderson.com/2013/10/08/knockout-3-0-release-candidate-available/
Beginning with Knockout 3.0, you can use the arrayChange
event to do this more easily. More info is here: http://blog.stevensanderson.com/2013/10/08/knockout-3-0-release-candidate-available/
这篇关于使用 Knockoutjs ObservableArray 确定添加或删除了哪个元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!