2013-02-10 16 views
19

Ho le seguenti due percorsi per modificare e nuova:corretta pulizia del codice

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 

Vorrei sapere qual è il codice corretto dovrebbe essere in ogni disattivare in modo che il negozio è in uno stato corretto se l'utente non salva, salva o altro.

Attualmente se ho percorso al percorso di modifica e poi direttamente al nuovo percorso senza salvare, ottengo il seguente errore:

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

+0

intendi all'uscita del percorso? Stai cercando qualcosa di simile a questo: http://stackoverflow.com/questions/14797338/ember-clear-form-after-submitting –

+0

L'errore si verifica specificamente quando si passa direttamente dalla rotta di modifica alla nuova rotta e poi si prova a cambiare il modello. – dagda1

+0

Ehi, questa è una vecchia domanda, ma hai capito il modo canonico per fare questo? –

risposta

1

Questa domanda è per una versione precedente di dati di Ember, ma risposta sarebbe stato prima controllare lo stato per isDeleted e solo il rollback se il record non è già cancellato.

Nei dati di brace più recenti non vi è alcun concetto di transazione, ma è comunque possibile che si verifichi un problema simile se si sta tentando di ripristinare un record non ancora mantenuto.

avrei probabilmente fare questo in caso router willTransition come si può fare cose come abortire la transizione, se si vuole dare all'utente la possibilità di salvare le modifiche.

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() 
    } 
    } 
    } 
Problemi correlati