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

試してみてください:

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

sliceこれには関数を使用できます:

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

その場合、ko は配列を複製します。

于 2013-01-28T13:56:49.390 に答える