2012-01-12 29 views
5

Tôi muốn thực hiện chức năng Hoàn tác và Làm lại không chỉ cho phía máy khách mà còn cho phía máy chủ. Đối với insatnce tôi có một div chứa hình ảnh và tôi có thể xoay thay đổi kích thước và viết lại nó, Tất cả các hoạt động cơ bản để tạo hình ảnh. Và tất cả các hoạt động cập nhật dữ liệu và hình ảnh. bạn có thể nói hình ảnh của tôi đang được tái tạo và cơ sở dữ liệu được cập nhật sau mỗi hành động.Thực hiện Hoàn tác và Làm lại chức năng javascript và php

Bây giờ tôi cần triển khai chức năng Hoàn tác và Làm lại. Tôi đã làm một số nghiên cứu là tốt. Những gì tôi cần là cách tiếp cận tốt nhất để thực hiện nhiệm vụ được yêu cầu. Tôi đã suy nghĩ để duy trì mỗi hành động "đăng nhập loại điều" hoặc xử lý nó với cơ sở dữ liệu hoặc với các mảng javascript bao gồm HTML hoặc những gì khác ??

cách tiếp cận tốt nhất để đạt được mục tiêu của mình là gì.

Cảm ơn,

+0

bạn có thể đăng những gì bạn có cho đến nay? –

+0

Có [Mẫu thiết kế lệnh] nổi tiếng (http://sourcemaking.com/design_patterns/command) rất phù hợp cho chức năng hoàn tác làm lại. –

Trả lời

18

Ở mức độ cơ bản, bạn cần hai điều:

  • một đống hoạt động (mảng) mà theo dõi những hoạt động đã được thực hiện. Khi người dùng thực hiện một thao tác, bạn tạo một đối tượng mô tả hoạt động và thêm nó vào mảng. Khi người dùng truy cập hoàn tác, bạn có thể xóa mục cuối cùng khỏi mảng.

  • mỗi loại hoạt động cần phương thức 'lưu' và phương pháp 'hoàn tác'. Điều này có thể phức tạp như một số phương pháp 'hoàn tác' tương tự như phương pháp 'lưu' của họ (nghĩa là hoàn tác lật ngang bạn chỉ cần thực hiện thao tác lật khác), trong khi các phương thức khác không có tính đối xứng như vậy lưu trữ dữ liệu hình ảnh như trước khi vụ việc xảy ra).

Nếu bạn muốn chức năng 'làm lại', thì bạn sẽ cần một chồng hoạt động thứ hai. Mỗi khi một hoạt động được hoàn tác, bạn sẽ thêm nó vào cuối của redo stack. Nếu người dùng nhấn 'Làm lại', sau đó bạn di chuyển nó trở lại ngăn xếp hoạt động một lần nữa.

Có thể giúp xem xét mẫu Command (http://en.wikipedia.org/wiki/Command_pattern), vì điều này thường được sử dụng để triển khai Hoàn tác.

+1

undo/redo cũng có thể được thực hiện với một mảng lệnh được thực hiện và sử dụng chỉ mục/con trỏ đến hoạt động cuối cùng có thể di chuyển lên hoặc xuống ngăn xếp ... nhưng nói chung hoạt động theo cách ete, chỉ cần lưu vào bộ nhớ đôi – Sherlock

4

Trình quản lý hoàn tác javascript của tôi sử dụng mẫu lệnh. Về cơ bản, đối với mỗi hành động bạn cũng thực hiện hành động hoàn tác và thực hiện lại tác vụ. Bạn có thể xây dựng cùng một chức năng serverside.

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

Và đây là một ví dụ mã rõ ràng về mô hình lệnh: https://github.com/shichuan/javascript-patterns/blob/master/design-patterns/command.html

Các vấn đề liên quan