2013-03-28 13 views
6

piszę dyrektywę, która będzie działać tak:automatycznego zapisywania na rozmycie + „Cofnij” przycisk

  1. umożliwiają edycję jakiegoś tekstu (za pomocą zawartości edycji)
  2. na utratę ostrości należy zapisać jego wartość model (ostatnio oglądany i zapisywany w DB)
  3. powinien być przycisk "Cofnij", który przywraca zmiany.

Moja implementacja jest: http://plnkr.co/edit/DsWEYQV4j51i4GO6KjSe?p=preview

Jedyny problem mam jest po naciśnięciu „cofnąć” przycisk, DIV stracić ostrość (tak zdarzenie „focusOut” jest zwolniony) i wartość jest zapisywana w modelu, więc " cofnij "przycisk nie może przywrócić swojej wartości.

(klikam "cofnąć" -> focusOut zdarzenia (autozapis) -> kliknij zdarzenie (??? nie można cofnąć))

Możliwe obejścia widzę:

  1. ustawić czas na rozmycie i anuluj, jeśli został naciśnięty przycisk "cofnij". Ale jest to brzydkie, ponieważ użytkownik może wprowadzić wartość i przejść do innej części aplikacji, więc oszczędzanie z przekroczeniem limitu czasu nie uruchomi żadnych obserwatorów.
  2. zapisać wartość na focusin i przywrócić ją po zapisaniu przycisku "cofnij". Powoduje to inny problem: $ watch detektory będą działały ze zmienioną wartością, a następnie uruchomione ponownie z poprzednią wartością (więc nie byłoby 2 zapisów do DB zamiast jednego)

Czy ktoś ma rozwiązanie takiego zachowania (autosave na rozmycie + undobutton)?

+1

Myślę, że będziesz musiał żyć z dwoma zapisami DB (obejście # 2). Ponieważ nie możesz wiedzieć, czy użytkownik ma zamiar uderzyć w "Cofnij", musisz najpierw zapisać zmienioną wartość, jeśli potrzebujesz zachowania autozapisu. Mamy nadzieję, że operacje cofania będą rzadkie, a zatem podwójne zapisy DB będą pisane. –

+0

Widziałeś to? http://stackoverflow.com/questions/13320015/how-to-write-a-dounce-service-in-angularjs Może ci pomóc z autozapisaniem –

Odpowiedz

1

Co powiesz na używanie funkcji debounce underscore.js lub podobnej, aby spowodować opóźnienie autozapisu, gdzie będzie sprawdzać flagę cofania i anulować? Nie wiem, co robią obserwatorzy $ watch. Oczywiście nadal nie będzie działać, jeśli użytkownik całkowicie wyjdzie z aplikacji lub odświeży stronę itp.