2016-04-28 13 views
5

używam Ember danych Aby edytować użytkownikowi automatyczne modelu rozdzielczościNajlepszy sposób, aby cofnąć wszystkie zmiany w modelu Ember Danych

this.route('user', function() { 
    this.route('edit', { path: ':user_id'}) 
}); 

Działa to dobrze, a użytkownik może modyfikować wszystkie aspekty modelu DS.attribute, DS.belongsTo i DS.hasMany.

Użytkownik może nawigować na wiele sposobów, w takim przypadku wszystkie zmiany powinny zostać usunięte z modelu.

  • Kliknięcie Cancel przycisk
  • Kliknięcie przycisku
  • Broswer Back Kliknięcie przycisku Save, zdalne żądanie fails, następnie z nawigacją od strony.
  • Wystarczy kliknąć inny link na stronie, który przenosi je w inne miejsce.

Zmiany należy wprowadzić tylko wtedy, gdy użytkownik wyraźnie tego chce, klikając przycisk Save, a żądanie serwera powiedzie się.

Zastanawiam się, czy używać ember-buffered-proxy, ale nie jestem pewien, jak to będzie poradzić sobie ze związkami DS.belongsTo i DS.hasMany. Niezależnie od tego, przed zapisaniem modelu będę musiał wykonać buffer.applyBufferedChanges(); przed zapisaniem, a jeśli serwer zawiedzie, znajduję się w stanie zachowania jak poprzednio.

Haczyk willTransition wydaje się być oczywistym miejscem do zrobienia tego, ale jak mogę upewnić się, że wszystkie zmiany zostały usunięte z modelu podanego rollbackAttributes() działa tylko dla formantów .

+0

Jeśli używasz zasady "Działania w górę, dane w dół" [(1)] (http://www.samselikoff.com/blog/data-down-actions-up/) [(2)] (https: //dockyard.com/blog/2015/10/14/best-practices-data-down-actions-up) i użyj jednokierunkowych powiązań w szablonie, aby zmiany podczas edycji nie były natychmiast propagowane do modelu, ale gdy kliknij "zapisz", a następnie model może zostać zaktualizowany za pomocą odpowiedniej akcji (tak, aby model był właścicielem kodu do aktualizacji, zamiast rozpraszania go na wielu trasach/komponentach) i jeśli odejdziesz od strony edycji, to zmiany są po prostu wyrzucić. – MT0

+0

Naprawdę nie można zobaczyć, jak rozwiązuje to problem, ponieważ model danych ember jest modelem zwracanym z haka modelu tras. – jax

+0

Zwrócenie pustego obiektu, a później zapisanie go jako modelu, jest tym, co należy wziąć pod uwagę? – TameBadger

Odpowiedz

1

Spróbuj wykorzystując metodę wewnątrz willTransition() haka działania trasie za Ember.Route refresh() coś takiego:

action: { 
    willTransition() { 
    const unsavedModel = this.get('unsaved'); 
    if (unsavedModel) { 
     this.refresh(); 
    } 
    } 
} 

Sposób refresh() mogą być wykorzystywane do „re-odpytywanie serwera do najnowszych informacji, stosując te same parametry tak jak przy pierwszej trasie. "

ja sugeruje flagę nazwie unsaved, które mogą domyślnych do true, o ile nie został ustawiony na false w pewnym momencie podczas udanego save przed przejściem.

Powiązane problemy