2015-02-25 6 views
6

Piszę niestandardowy edytor HTML. Użytkownik może edytować całą treść HTML, a zmiany zostaną zaktualizowane w DOM. Mamy opcję cofnięcia wszystkich zmian.Cofanie zmian dom w JS

logicznych:

Clone cały pojemnik przed dokonaniem zmiany i zastosować go ponownie.

Wady:

  1. Przechowywanie ogromny zmienną w pamięci JS.

  2. Po ponownym zastosowaniu zmian dom zmieni wszystko.

Czy istnieje sposób na osiągnięcie tego samego ?.

+2

ponieważ używasz jquery, czemu nie przechowywać sklonowanej domeny jako ciągu znaków, a następnie użyć '.html()', aby ponownie zainstalować. w ten sposób przechowujesz tylko łańcuchy, a nie fragmenty domingu. – atmd

+0

Przechowywanie ciągów html nie wymaga dużej ilości pamięci i najprawdopodobniej jest to, co i tak będzie wysyłane na serwer. – charlietfl

+0

contentEditable strony obsługują polecenia cofania, ale nie wiem, jak dobrze obsługa przeglądarki to jest – the8472

Odpowiedz

0

przeznaczenia Przechowywanie internetowej, aby zachować historię DOM.

Wyobraź sobie, że chcesz cofnąć ostatnie trzy wykonane akcje. Nie należy zapisywać go w pamięci, ponieważ można stracić informacje na temat odświeżania strony. I naprawdę nie wiesz, czy ta akcja zostanie użyta do zapisania w pamięci.

Możesz używać pamięci internetowej z kompresją danych, aby zachować najmniejszą ilość danych.

2

Twoje pytanie jest bardzo przydatne. Nie wiem, jaki jest optymalny sposób radzenia sobie z tą sytuacją, ale wiem, że istnieje Command Design Pattern, który może działać w tym przypadku. Dzięki wzorcowi polecenia Command można cofnąć zdarzenia zapisane w programie. Dla mnie zrozumienie, że używanie Wzorca projektowania Command polega na tym, że musisz mieć funkcje, które działają odwrotnie, gdy chcesz coś cofnąć. Na przykład, jeśli chcesz cofnąć dodanie wyniku funkcji, musisz mieć funkcję odejmowania. Do funkcji rysowania musisz mieć funkcję czyszczenia/wymazywania. Oto JavaScript example.