2012-01-12 7 views
5

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

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

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

Спасибо,

+0

вы можете оставить то, что вы до сих пор? –

+0

Существует хорошо известный [шаблон проектирования команд] (http://sourcemaking.com/design_patterns/command), который очень подходит для функциональности отмены отмены. –

ответ

18

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

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

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

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

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

+1

undo/redo также можно реализовать с помощью одного массива выполненных команд и использовать указатель/указатель на последнюю активную операцию, которая может перемещаться вверх или вниз по стеку ... но в общем работает эфир, просто сохраняйте на двойной памяти – Sherlock

4

My javascript undo manager использует шаблон команды. В принципе, для каждого действия вы также выполняете действие отмены и повторное действие. Вы можете создать такую ​​же функциональность serveride.

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^