2015-02-25 12 views
6

Tôi đang viết trình chỉnh sửa HTML tùy chỉnh. Người dùng có thể chỉnh sửa toàn bộ nội dung HTML và các thay đổi sẽ được cập nhật trong DOM. Chúng tôi có tùy chọn để hoàn tác tất cả các thay đổi.Hoàn tác thay đổi trong JS

Logic:

Sao chép toàn bộ vùng chứa trước khi thay đổi và áp dụng lại.

Nhược điểm:

  1. Lưu trữ một biến lớn trong bộ nhớ js.

  2. Và áp dụng các thay đổi một lần nữa, nhà thờ sẽ vẽ lại mọi thứ.

Có cách nào để đạt được điều tương tự không ?.

+2

khi bạn đang sử dụng jquery, tại sao không lưu trữ các nhân bản vô tính như là một chuỗi, sau đó sử dụng '.html()' để reinsert. theo cách đó bạn chỉ lưu trữ các chuỗi thay vì các mảnh dom. – atmd

+0

lưu trữ chuỗi html không phải là bộ nhớ chuyên sâu và rất có thể là những gì bạn sẽ gửi tới máy chủ anyway – charlietfl

+0

contentTrang có thể hỗ trợ hoàn tác các lệnh, nhưng tôi không biết trình duyệt hỗ trợ tốt như thế nào là – the8472

Trả lời

0

Sử dụng lưu trữ web để giữ lại lịch sử DOM.

Hãy tưởng tượng bạn muốn hoàn tác ba hành động cuối cùng được thực hiện. Bạn không nên lưu nó vào bộ nhớ vì bạn có thể mất thông tin về làm mới trang. Và bạn thực sự không biết liệu hành động này có được sử dụng để lưu vào bộ nhớ hay không.

Bạn có thể sử dụng bộ nhớ web có nén dữ liệu để giữ lượng dữ liệu nhỏ nhất.

2

Câu hỏi của bạn rất hữu ích. Tôi không biết cách tối ưu để xử lý tình huống này là gì, nhưng tôi biết rằng có Command Design Pattern có thể hoạt động trong trường hợp này. Với Command Design Pattern, bạn có thể hoàn tác các sự kiện đã được lưu trong chương trình của bạn. Theo hiểu biết của tôi, mẹo sử dụng Mẫu thiết kế lệnh là bạn cần có các chức năng làm điều ngược lại khi bạn cần hoàn tác một thứ gì đó. Ví dụ: nếu bạn cần hoàn tác thêm kết quả hàm, bạn cần phải có hàm trừ. Đối với chức năng vẽ, bạn cần phải có chức năng xóa/xóa. Đây là JavaScript example.

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