2013-02-10 11 views
19

mam następujące dwie trasy do edycji i nowe:Prawidłowe oczyścić kod

WZ.ExercisesNewRoute = Em.Route.extend 
    model: -> 
    WZ.Exercise.createRecord() 
    deactivate: -> 
    @_super.apply this, arguments 
    @get('currentModel.transaction').rollback() 

WZ.ExercisesEditRoute = Em.Route.extend 
    model: (params) -> 
    WZ.Exercise.find(params.exercise_id) 
    serialize: (params, options) -> 
    exercise_id: params.get('id') 
    deactivate: -> 
    @_super.apply this, arguments 
    tx = @get('currentModel.transaction') 
    tx.rollback() if tx 

Chciałbym wiedzieć, co prawidłowy kod powinien być w każdym dezaktywować więc sklep jest w prawidłowym stanie, jeśli użytkownik nie zapisuje, nie zapisuje ani nic.

Obecnie jeśli droga ja na trasie edytować, a następnie bezpośrednio do nowej trasy bez zapisywania, pojawia się następujący błąd:

Uncaught Error: Attempted to handle event willSetProperty on while in state rootState.deleted.saved. Called with {reference: [object Object], store: , name: name}

+0

Masz na myśli przy wyjeździe z trasy? Szukasz czegoś takiego: http://stackoverflow.com/questions/14797338/ember-clear-form-after-submitting –

+0

Błąd występuje w szczególności podczas bezpośredniego przejścia z trasy edycji do nowej trasy, a następnie próby zmiany model. – dagda1

+0

Hej, to jest stare pytanie, ale czy wymyśliłeś kanoniczny sposób na zrobienie tego? –

Odpowiedz

1

To pytanie jest dla starszej wersji danych Ember, ale odpowiedź musiałaby aby najpierw sprawdzić stan isDeleted i wycofać tylko, jeśli rekord nie jest już usunięty.

W nowszych danych embera nie ma koncepcji transakcji, ale nadal można napotkać podobny problem, jeśli próbujesz przywrócić rekord, który nie został jeszcze utrwalony.

Prawdopodobnie dokonałbym tego w zdarzeniu ruterów podczas przejścia, ponieważ można zrobić takie rzeczy, jak przerwanie przejścia, jeśli chcesz dać użytkownikowi opcję zapisania zmian.

willTransition: function(transition) { 
    controller = this.get('controller') 
    if(controller.get('content.isDirty')) { 
    if(controller.get('content.isNew') && confirm('Closing this window will revert all unsaved changes.')){ 
     controller.get('content').deleteRecord(); 
    } else { 
     controller.get('content').rollback() 
    } 
    } 
    }