Автосохранение с помощью кнопок «Отменить» / «Повторить» по сравнению с кнопками «Сохранить / Вернуть» при использовании backbone.js

Я создаю RIA с интенсивным вводом данных, используя backbone.js. Мой первый план состоял в том, чтобы иметь кнопки «Сохранить» и «Отмена» в моем пользовательском интерфейсе и сохранять мои модели только большими кусками, когда пользователь нажимает кнопку «Сохранить». Нажатие отмены просто перезагрузит модель с сервера. Таким образом, пользователям не нужно беспокоиться о совершении необратимых ошибок.

Однако теперь я понимаю, что реализация отмены / повтора, вероятно, не будет такой сложной задачей, учитывая, насколько легко «следить» за изменениями в моделях и правильно обновлять представление при возврате значений модели. Если бы у меня была отмена / повтор, я бы выбрал мгновенное сохранение моих моделей на сервере.

Поддерживает ли магистраль один из двух подходов? Какой хороший способ реализовать отмену / возврат с использованием базового стиля MVC?


person srmark    schedule 11.05.2011    source источник


Ответы (1)


Вы давно ждали этого ответа, возможно, вы уже ответили на него. У меня нет кода, но пара концепций пришлась мне в голову.

На высоком уровне у меня была бы базовая модель, которую можно было бы отменить - или, может быть, вы могли бы использовать какую-то форму миксина, чтобы дать модели возможность отмены. Реализация отмены будет использовать шаблон команды для формирования многоуровневого «стека» отмены.

Если бы я реализовывал это, я бы снабдил отменяемую модель коллекцией командных моделей backbone.js. Эти командные модели будут инкапсулировать изменения в отменяемой модели и будут созданы вместе с событием изменения из модели. Чтобы отменить изменение отменяемой модели, вы должны удалить верхнюю команду и применить ее к отменяемой модели. Обновление сервера уничтожит набор команд.

Единственная сложность для всего этого заключается в том, как управлять изменениями, которые происходят из-за отмены - они сами по себе не должны генерировать команду отмены наверху стека.

Надеюсь это поможет.

person Bill Eisenhauer    schedule 28.05.2011
comment
Извините, я ответил на этот вопрос более двух лет назад, когда использовал backbone.js для проекта. С тех пор я действительно ни разу не вернулся к backbone.js, так что я бы не стал доверять ни одному примеру, который я бы не сколотил. - person Bill Eisenhauer; 14.10.2013