使用 Knockoutjs ObservableArray 确定添加或删除了哪个元素 [英] Determine which element was added or removed with a Knockoutjs ObservableArray

查看:24
本文介绍了使用 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆