Поддерживает ли KnockoutJS защищенный наблюдаемый массив?

#knockout.js

#knockout.js

Вопрос:

Каков наилучший способ обработки наблюдаемого массива, который может быть зафиксирован / выброшен в KnockoutJS?

Я достиг этого раньше с помощью идеи ProtectedObservable, но это было для одной записи данных, а не для массива.

Просто интересно, как лучше продвигаться вперед. Для моего проекта требуется диалоговое окно со всеми контактами с адресами электронной почты и список выбранных. По мере добавления из списка слева они удаляются и добавляются в список справа.

При нажатии кнопки «ok» они добавляются в поле Кому:, но при нажатии кнопки «Отмена» списки восстанавливаются до их предыдущего состояния (которое уже могло быть заполнено ранее).

Ответ №1:

Как насчет чего-то вроде этого:http://jsfiddle.net/rniemeyer/PAzVk /

При этом используется observableArray, который поддерживает «моментальные снимки». Вы можете сохранить копию базового массива и восстановить его, когда вам нужно.

 ko.snapShotObservableArray = function(initialData) {
    var _snapShot = initialData;
    var result = ko.observableArray(initialData || []);

    result.takeSnapShot = function() {
        _snapShot = this().slice();  //take a copy of the underlying array
    };

    result.restoreSnapShot = function() {
       this(_snapShot.slice());   
    }

    return resu<
}
  

В примере вы бы использовали это для своего массива доступных пользователей, массива выбранных пользователей и массива пользователей в строке «Кому». Затем кнопка отмены восстанавливает каждый массив обратно в точку, с которой вы сделали последний снимок.

Комментарии:

1. Как всегда, фантастическое решение. Спасибо, Райан.