«Автосохранение с отменой / повтором» против «Сохранить / Восстановить кнопки» при использовании backbone.js - PullRequest
5 голосов
/ 12 мая 2011

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

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

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

1 Ответ

5 голосов
/ 28 мая 2011

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...