2013-02-10 68 views
2

我使用Ember Data創建了非常簡單的Ember應用程序。有一種形式是用戶創建實體並提交的。這是一個在BandsNewView(由灰燼自動創建),由BandsNewController控制:Ember - 提交後清除表單

App.BandsNewController = Ember.Controller.extend({ 
    cancel: function() { 
     this.transitionTo('bands'); 
    }, 

    save: function() { 
     App.Band.createRecord(this); 
     this.get('store').commit(); 

     this.set('name'); 
     this.set('description'); 
     this.transitionTo('bands'); 
    } 
}); 

不知是否有simplier解決「清理」(即空)保存新的樂隊後的實體形式?我可以說this.set()這樣的東西,它會清空所有的字段嗎?或者我的方法本質上是錯誤的,我應該完全不同嗎?

回答

2

我一直在享受的模式是創建和銷燬路線本身進入和退出時的對象。

App.BandsNewRoute = Ember.Route.extend({ 
    model: function(params) { 
    return App.Band.createRecord({}); 
    }, 
    save: function() { 
    this.get('currentModel.store').commit(); 
    return this.transitionTo('bands'); 
    }, 
    exit: function() { 
    var model = this.get('currentModel'); 
    if (model.get("isNew") && !model.get("isSaving")) { 
     return model.get('transaction').rollback(); 
    } 
    } 
}); 

正如你所看到的,它使出口功能稍微複雜一點,但它會爲每個對象創建的路線完全一樣,這樣你就可以因素出來。現在,您的模板可以直接綁定到模型的屬性,並且模型將在保存時保存或退出(這將清除表格)

如果您計劃可能更改其他數據模型並且不保存它們或者有未保存的模型,安全地清除模型的一種方法是將其放入自己的事務中。我只傾向於使用這個,但對象不是我當前流程的主要焦點。

App.BandsNewRoute = Ember.Route.extend({ 
    model: function(params) { 
    var transaction = this.get('store').transaction(); 
    return transaction.createRecord(App.Band, {}) 
    } 
}); 

其他一切都可以保持不變。

+0

這也可以回滾可能存在的其他更改。您可能需要將記錄放入單獨的交易中。請參閱我的編輯.. – 2013-02-10 13:14:57

+0

Shimon,您進行交易的方式有點冗長,更新時間較短。 – 2013-02-10 14:40:38

+0

@AndreMalan值得更新,使用'停用'並刪除交易代碼。我認爲最好是評論,而不是完全爲你重寫。 – jonathanKingston 2015-06-01 17:30:29