2011-11-02 71 views
3

我們需要能夠處理骨幹之前和之後保存事件。保存事件之前和之後的骨幹js

基本上,當我們有一個保存的負載發生,我們想顯示一個「保存...」的消息。不知道Backbine如何處理批次保存,但如果有一個隊列我們希望能夠在處理批處理之前顯示,然後在處理完成後移除。

Backbone中是否有這樣的東西?

回答

2

在您撥打保存之前,只需顯示您的信息。所以有以前的情況。

至於後面你可以傳遞成功函數。 save方法需要2個可選參數。唯一的警告是,第一個總是必須是屬性。

yourModel.save({ 
    attr1: attr1, 
    attr2: attr2 
}, 
{ 
    success: function(model, response) 
    { 
     //do whatever 
    } 
}); 
+4

這很麻煩,因爲我們必須在我們稱之爲保存的任何地方執行此操作。另外 - 這對集合沒有好處:( – iwayneo

+0

)你可以在mixin中抽象出這個行爲(一個包含函數的散列對象),並將它包含在視圖中 – dira

+0

是的,我從來沒有說過我認爲它很漂亮。一個簡單的方法就是使用模型現有的屬性,不幸的是,如果不先傳入某個屬性參數,就無法傳遞成功函數來保存。 – mccow002

1

如何覆蓋Backbone.Model.save?快速執行:

Backbone.Model._amountOfModelsSaving = 0; 
Backbone.Model._save = Backbone.Model.save; 
Backbone.Model.save = function() { 
    if (Backbone.Model._amountOfModelsSaving === 0) { 
     // Show the message 
    } 

    Backbone.Model._amountOfModelsSaving++; 
    var request = Backbone.Model._save.apply(this, arguments); 
    request.always(function() { 
     Backbone.Model._amountOfModelsSaving--; 
     if (Backbone.Model._amountOfModelsSaving === 0) { 
      // Hide the message 
     } 
    }); 

    return request; 
} 
+0

對不起,但我該怎麼做呢?我根本就不熟悉bb - 這是我繼承的代碼 – iwayneo

+0

好吧,如果你把它放在一個剛好在Backbone之後加載的文件中,它會替換原來的保存函數(呃,實際上是「代理」) 。 – Paul