Реализация функций отмены и повтора javascript и php - PullRequest
8 голосов
/ 12 января 2012

Я хочу реализовать функции отмены и повтора не только на стороне клиента, но и на стороне сервера. Для insatnce у меня есть div, содержащий изображение, и я могу повернуть изменить размер и переписать его, все основные операции для генерации изображения. И все операции обновления базы данных и изображения. Вы можете сказать, что мое изображение восстанавливается, и база данных обновляется после каждого действия.

Теперь мне нужно реализовать функции отмены и повтора. Я также провел некоторые исследования. Что мне нужно, так это лучший подход к реализации поставленной задачи. Я думал о том, чтобы поддерживать каждое действие «вещь типа журнала» или обрабатывать его с помощью базы данных или массивов JavaScript, включая HTML или что-то еще.

Каков наилучший подход для достижения моей цели.

Спасибо

Ответы [ 2 ]

23 голосов
/ 12 января 2012

На базовом уровне вам нужны две вещи:

  • стек операций (массив), который отслеживает выполненные операции.Когда пользователь выполняет операцию, вы создаете объект, который описывает операцию, и добавляете ее в массив.Когда пользователь нажимает кнопку «Отменить», вы можете удалить последний элемент из массива.

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

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

Это может помочь в просмотре шаблона команд (http://en.wikipedia.org/wiki/Command_pattern),, поскольку это часто используется для реализации отмены.

5 голосов
/ 13 января 2012

Мой менеджер отмены JavaScript использует шаблон команды.По сути, для каждого действия вы также реализуете действие отмены и действие повтора.Вы можете создать такую ​​же функциональность на стороне сервера.

https://github.com/ArthurClemens/Javascript-Undo-Manager

И это простой пример кода шаблона команды: https://github.com/shichuan/javascript-patterns/blob/master/design-patterns/command.html

...