#save #backbone.js #undo #autosave
#Сохранить #backbone.js #отменить #автосохранение
Вопрос:
Я создаю RIA с интенсивным вводом данных, используя backbone.js. Мой первый план состоял в том, чтобы иметь кнопки «Сохранить» и «Отмена» в моем пользовательском интерфейсе и сохранять мои модели только большими кусками всякий раз, когда пользователь нажимает сохранить. Нажатие кнопки отмены просто перезагрузит модель с сервера. Таким образом, пользователям не нужно беспокоиться о совершении необратимых ошибок.
Однако теперь я понимаю, что реализовать отмену / повтор, вероятно, было бы не так сложно, учитывая, насколько легко «наблюдать» за изменениями в моделях и корректно обновлять представление при возврате значений модели. Если бы у меня была функция отмены / повтора, я бы предпочел, чтобы мои модели сохранялись на сервере мгновенно.
Является ли один из двух подходов предпочтительным для backbone? Какой хороший способ реализовать отмену / повтор, используя стиль backbone в MVC?
Ответ №1:
Вы некоторое время ждали этого ответа, возможно, вы уже ответили на него. У меня нет кода, но пара концепций поразила меня до глубины души.
На высоком уровне у меня была бы базовая модель, которую нельзя было отменить — или, может быть, вы могли бы использовать какую-то форму микширования, чтобы придать модели возможность отмены. Реализация отмены будет использовать шаблон команды для формирования многоуровневого «стека» отмены.
Если бы я реализовывал это, я думаю, я мог бы оснастить отменяемую модель backbone.js коллекция моделей команд. Эти командные модели будут инкапсулировать изменения в отменяемой модели и будут созданы в сочетании с событием изменения модели. Чтобы отменить изменение в отменяемой модели, вы должны отключить команду top и заставить ее применить отмену к отменяемой модели. Обновление сервера приведет к удалению набора команд.
Единственная сложность во всем этом заключается в том, как управлять изменениями, которые происходят из-за отмены — они сами по себе не должны генерировать команду отмены в верхней части стека.
Надеюсь, это поможет.
Комментарии:
1. Извините, я ответил на этот вопрос более двух лет назад, когда я использовал backbone.js для проекта. Я действительно никогда не возвращался к backbone.js с тех пор я бы не доверял ни одному примеру, который я бы не собрал вместе.