2013-02-20 61 views
8

我想在創建帖子後進行轉換。在保存餘燼數據模型後轉換

後/新>點擊提交>軌後端成功創建的帖子及回覆一個JSON>重定向到新創建的職位的路徑

在ember_data_example github上的源代碼。他們用這種方法

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

它工作正常,因爲該模型具有無效的ID模型創建的時候,當模型保存成功,因爲這個功能觀察模型ID改變其ID會改變。

但是,也許,只要模型的ID屬性發生改變,該函數就會被執行。 我在找更多的語義方式。

我要當模特的狀態更改爲「isDirty」 =假& &「是否新款」 ==真表「isDirty」 = TRUE,要執行 過渡「是否新款」 =假。

我該如何執行此操作?

回答

20

理想情況下,id不應該改變。但是,從語義上講,你是正確的,這種方法看起來不正確。

還有就是要做到這一點更清潔的方式:

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

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

UPDATE 2013年11月27日(ED 1.0測試版):

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

謝謝,這正是我需要的! – synthresin 2013-02-20 16:08:16

+0

感謝您的編輯建議...爲什麼被拒絕? – 2013-02-22 10:19:39

+0

我錯過了什麼嗎?我有一個保存函數作爲一個窗體上的操作,但傳遞給我的匿名函數的參數是未定義的。所以我不能調用它()。 – agmcleod 2013-04-09 19:21:28

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

注意的灰燼2.4這是包裝以處理組件或路由級別的保存操作(並避免控制器)。下面是一個例子。請注意轉場中模型對象上的id。並注意我們如何在路徑中使用transitionTo而不是transitionToRoute。

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