0

我在代码中声明了 2 个可观察数组,如下所示

self.versionDataByProduct = ko.observableArray([]);
self.copiedSavedVersionData = ko.observableArray([]);

当我保存数据时,我将 self.versionDataByProduct 中的所有值复制到 self.copiedSavedVersionData 中,如下所示

 self.copiedSavedVersionData(self.versionDataByProduct());

然后我尝试在名为 compareArray 的按钮事件上比较 2 个可观察数组,如下所示

 this.compareArray = function () {
        debugger;
        var results = [];
        var differences = ko.utils.compareArrays(self.versionDataByProduct(), self.copiedSavedVersionData());
        ko.utils.arrayForEach(differences, function (difference) {
            if (difference.status === "deleted") {
                results.push(difference.value);
            }
        });
        return results;
    };

但这不起作用。因为在我将一个可观察数组复制到另一个并在可观察数组中进行一些修改之后,它会自动更新其他数组。我不想要那个。我希望我的可观察数组 self.copiedSavedVersionData 在复制后保持原样。我怎样才能实现它?如果我做了任何更改,我只是在跟踪它。如果数组被更改,那么我将在我的代码中启用按钮。目前我不知道如何进行脏跟踪,所以找到了这个替代方案但不起作用。请帮忙。

4

2 回答 2

1

您可以slice为此使用函数:

 self.copiedSavedVersionData(self.versionDataByProduct().slice(0));

在这种情况下,ko 将克隆数组。

于 2013-01-28T13:56:49.390 回答
1

尝试:

ko.utils.arrayPushAll(self.copiedSavedVersionData, self.versionDataByProduct());
于 2013-01-28T14:48:44.177 回答