2013-02-20 3 views
8

Desidero effettuare la transizione dopo aver creato un post.transizione dopo il salvataggio del modello di dati di brace

postale/new> fare clic su Invia> rotaie backend creare con successo postale e la risposta di un JSON> reindirizzare al percorso di nuova funzione

nel codice sorgente di ember_data_example GitHub. usano questo approccio

transitionAfterSave: function() { 
    // when creating new records, it's necessary to wait for the record to be assigned 
    // an id before we can transition to its route (which depends on its id) 
    if (this.get('content.id')) { 
     this.transitionToRoute('contact', this.get('content')); 
    } 
}.observes('content.id'), 

Funziona bene, perché il modello ha ID di null quando il modello creato, e il relativo ID cambierebbe quando il risparmio modello è successo perché questa funzione osserva il cambiamento dei modelli di ID.

Ma forse, questa funzione verrà eseguita ogni volta che viene modificata la proprietà ID del modello. Sto trovando un modo più semantico.

voglio transizione da eseguire quando lo stato del modello viene modificato in 'IsDirty' = false & & == 'isNew' vera forma 'IsDirty' = true, 'isNew' = false.

Come posso implementarlo?

risposta

20

Idealmente, l'ID non dovrebbe cambiare. Tuttavia, sei corretto, semanticamente, questo metodo non sembra giusto.

C'è un modo più pulito per fare questo:

save: function(contact) { 
    contact.one('didCreate', this, function(){ 
    this.transitionToRoute('contact', contact); 
    }); 

    this.get('store').commit(); 
} 

UPDATE 2013/11/27 (ED 1.0 beta):

save: function(contact) { 
    var self = this; 
    contact.save().then(function() { 
    self.transitionToRoute('contact', contact); 
    }); 
} 
+0

Grazie, questo è esattamente ciò di cui ho bisogno! – synthresin

+0

Grazie per il suggerimento di modifica ... perché è stato rifiutato? –

+0

Mi manca qualcosa? Ho una funzione di salvataggio come azione su un modulo, ma il parametro passato alla mia funzione anomala non è definito. Quindi non posso chiamarne uno(). – agmcleod

3
actions: { 
     buttonClick: function() { 
      Ember.debug('Saving Hipster'); 
      this.get('model').save() 
       .then(function (result) { 
        this.transitionToRoute('hipster.view', result); 
       }.bind(this)); 
     } 
    } 
4

Nota per Ember 2.4 E ' incantato per gestire le azioni di salvataggio a livello di componente o di percorso (ed evitare controllori). Ecco un esempio qui sotto. Annota l'id sull'oggetto del modello nella transizione. E nota come utilizziamo transitionTo e non transitionToRoute nel percorso.