2013-02-20 12 views
8

Ich möchte den Übergang nach dem Erstellen eines Beitrags machen.Übergang nach dem Speichern des Modells der Glut Daten

post/neu> klicken Sie auf Absenden> Schienen Backend erfolgreich Post und Antwort eine json erstellen> Umleitung auf neu geschaffene Pfad

in ember_data_example Github-Quellcode. sie verwenden diesen Ansatz

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'), 

Es funktioniert gut, weil die Modell-ID von null hat, wenn Modell erstellt, und seine ID ändern würde, wenn das Modell Einsparung erfolgreich ist, da diese Funktion Modellwechsel ID beobachtet.

Aber vielleicht wird diese Funktion ausgeführt, wenn die ID-Eigenschaft des Modells geändert wird. Ich finde etwas mehr semantischen Weg.

Ich möchte Übergang ausgeführt werden, wenn der Status des Modells 'isDirty' = false & & 'isNew' == true Form 'isDirty' = true, geändert wird 'isNew' = false.

Wie kann ich das umsetzen?

Antwort

20

Idealerweise sollte sich die ID nicht ändern. Wie auch immer, Sie haben Recht, semantisch scheint diese Methode nicht richtig zu sein.

Es ist ein sauberer Weg, dies zu tun:

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

Danke, das ist genau das, was ich brauche! – synthresin

+0

Danke für den Änderungsvorschlag ... warum wurde er abgelehnt? –

+0

Fehle ich etwas? Ich habe eine Speicherfunktion als Aktion für ein Formular, aber der Parameter, der an meine anonyme Funktion übergeben wird, ist nicht definiert. Also kann ich keinen() darauf anrufen. – agmcleod

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

Hinweis für Ember 2.4 Es ist Es wurde für das Speichern von Aktionen auf Komponenten- oder Routenebene angepasst (und Controller vermieden). Hier ist ein Beispiel unten. Notieren Sie die ID des Modellobjekts im Übergang. Beachten Sie, dass wir transitionTo und nicht transitionToRoute in der Route verwenden.

actions: { 
    save() { 
     var new_contact = this.modelFor('contact.new'); 
     new_contact.save().then((contact) => { 
     this.transitionTo('contact.show', contact.id); 
     }); 
    }, 
Verwandte Themen