2012-01-16 114 views
13

如果我做我的功課正確的,我是來學習的是骨幹網不具有內置當模型使用模型的保存方法(即使有一個破壞事件保存時觸發保存事件)。如何在保存骨幹模型時觸發事件?

我還了解到Backbone有一個用於使用Backbone.Events對象創建自定義事件的漂亮機制。使用後者的作品,但我有這樣的印象,它不足以滿足我的需求。

我的設置如下。我有一個表(視圖)由行(視圖)組成,每行都有一個對模型的引用。保存模型時,我想更新/渲染行以反映更改。

如何創建保存保存模型時觸發的事件,以便更新對該模型的引用的表格行(視圖)?

換句話說,我希望能夠做到以下幾點:

this.model.bind('save', this.render); 

回答

17

就在3天前,一個commit是骨幹觸發時保存成功的模型sync事件做出。不過,這個提交還沒有發佈,所以如果你想使用它,你需要從github賬戶下載源代碼。

View = Backbone.View.extend({ 
    initialize: function() { 
    _.bindAll(this, 'onModelSaved'); 
    this.model.bind('sync', onSuccessCallback); 
    }, 

    onModelSaved: function(model, response, options) { 
    //perform your after save logic 
    } 
}); 
+4

我剛查過,這段代碼現在是主幹骨幹分支的一部分。 – 2012-08-22 19:47:31

+13

不幸的是,當從服務器獲取模型時,也會觸發'sync'事件,這不適合僅在從客戶端推送代碼時運行代碼的需要。 – Esteban 2013-07-02 20:29:29

+0

另一個解決方案** this.model.bind('sync',this.render,this); ** – 2014-11-11 11:04:55

9

由於Backbone.js的1.0.0你如果模型保存成功,則觸發事件sync

this.listenTo(this.model,'sync', this.render); 

注意的是,change:attribute首先解僱相關的屬性,如果沒有在屬性值的變化,其次是change事件再其次是sync事件。 sync無論模型發生什麼變化,都會觸發事件。這表示該模型現在與服務器值同步。

而且這些事件只有在值有效時纔會觸發。即models.validate不應該返回從服務器獲得的這些值的任何錯誤。