2013-02-10 8 views
19

Ich habe die folgenden zwei Routen für bearbeiten und neu:Correct aufzuräumen Code

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 

Ich mag würde wissen, was der richtige Code in jeder deaktivieren sein sollte, so ist der Laden in einem korrekten Zustand, wenn der Benutzer Speichert nicht, speichert oder was auch immer.

Zeit, wenn ich den Weg zur Route bearbeiten und dann bekomme ich folgende Fehlermeldung direkt an die neue Route ohne zu Speichern: würde

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

+0

meinst du am Ausgang der Route? Sind Sie auf der Suche nach etwas wie folgt: http://stackoverflow.com/questions/14797338/ember-clear-form-after-submitting –

+0

Der Fehler tritt speziell beim direkten Übergang von der Bearbeitungsroute auf die neue Route und dann versuchen, zu ändern das Model. – dagda1

+0

Hey, das ist eine alte Frage, aber hast du den kanonischen Weg gefunden, dies zu tun? –

Antwort

1

Diese Frage ist für eine ältere Version von Ember Daten, sondern Antwort hat war, zuerst den Status für isDeleted zu überprüfen und nur dann einen Rollback durchzuführen, wenn der Datensatz nicht bereits gelöscht wurde.

In den neueren Ember-Daten gibt es kein Konzept einer Transaktion, aber Sie können immer noch auf ein ähnliches Problem stoßen, wenn Sie versuchen, einen Datensatz wiederherzustellen, der noch nicht persistent ist.

Ich würde dies wahrscheinlich in dem Router tunTransition-Ereignis tun, wie Sie Dinge wie den Übergang abbrechen können, wenn Sie dem Benutzer die Möglichkeit geben möchten, die Änderungen zu speichern.

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() 
    } 
    } 
    } 
Verwandte Themen