2013-02-20 14 views
8

Chcę dokonać przejścia po utworzeniu wpisu.przejście po zapisaniu modelu danych embera

post/nowy> kliknij Wyślij> Szyny backend powodzeniem tworzyć post i odpowiedź lub json> przekierowanie do ścieżki nowo utworzone stanowisko w

w kodzie źródłowym ember_data_example github. używają tego podejścia

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

To działa dobrze, bo Model posiada identyfikator null gdy Model stworzony, a jego ID zmieni Zapisując model jest udany, ponieważ funkcja ta jest zgodna ze zmianami modeli ID.

Ale może ta funkcja zostanie wykonana, gdy właściwość ID modelu zostanie zmieniona. Znajduję jakiś bardziej semantyczny sposób.

Chcę przejście do wykonania gdy status modelu zostanie zmieniony na 'isDirty' = false & & == 'isNew' prawdziwa forma 'isDirty' = true, 'isNew' = false.

Jak mogę to wdrożyć?

Odpowiedz

20

Idealnie, id nie powinien się zmieniać. Jednak masz rację, semantycznie, ta metoda nie wydaje się właściwa.

Jest przejrzysty sposób na to:

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

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

UPDATE 27.11.2013 (ED 1,0 beta):

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

Dziękuję, to jest dokładnie to, czego potrzebuję! – synthresin

+0

Dzięki za propozycję edycji ... dlaczego została odrzucona? –

+0

Czy brakuje mi czegoś? Mam funkcję składowania jako działanie w formularzu, ale parametr przekazany do mojej funkcji anomicznej jest niezdefiniowany. Więc nie mogę nazwać jednego() na tym. – agmcleod

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

Informacja dla Ember 2.4 jest encoraged do obsługi zapisywania działań na poziomie komponentu lub trasy (i unikania kontrolerów). Oto przykład poniżej. Zwróć uwagę na identyfikator obiektu modelu w przejściu. Zwróć uwagę, jak używamy przejścia, a nie przejścia do trasy w trasie.

actions: { 
    save() { 
     var new_contact = this.modelFor('contact.new'); 
     new_contact.save().then((contact) => { 
     this.transitionTo('contact.show', contact.id); 
     }); 
    }, 
Powiązane problemy