Я объявил 2 наблюдаемых массива как следующие в моем коде

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

Когда я сохраняю данные, я копирую все значения из self.versionDataByProduct в self.copiedSavedVersionData, как показано ниже

 self.copiedSavedVersionData(self.versionDataByProduct());

Затем я пытаюсь сравнить 2 наблюдаемых массива по событию кнопки по имени CompareArray, как показано ниже

 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 оставался без изменений после его копирования. Как я могу этого достичь? Я просто отслеживаю, внесла ли я какие-либо изменения. Если массив будет изменен, я включу кнопку в моем коде. В настоящее время я не знаю, как мне пойти на грязное отслеживание, поэтому нашел эту альтернативу, но не работает. Пожалуйста помоги.

0
DevelopmentIsMyPassion 28 Янв 2013 в 17:54

2 ответа

Лучший ответ

Вы можете использовать функцию slice для этого:

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

В этом случае ко будет клонировать массив.

1
Artem Vyshniakov 28 Янв 2013 в 13:56

Попробуйте:

ko.utils.arrayPushAll(self.copiedSavedVersionData, self.versionDataByProduct());
1
Pablo Rodríguez 28 Янв 2013 в 14:48