2016-10-10 46 views
-2

我有一個骨幹網格/可編輯網格,每次編輯一個單元格時,「更改」事件被激發兩次,最終生成兩個單獨的PUT請求。骨幹網格:如何避免雙重變更事件

我知道發生這種情況是因爲「change」事件在單元格中編輯時觸發一次,而另一個數據從服務器返回時觸發;並且可以通過將{wait: true}傳遞給save方法來避免該行爲,但我不知道在哪裏需要重載它。

我的模型的聲明是這樣的:

var Redirects = Backbone.Model.extend({ 
    urlRoot: '/global/redirects', 
    initialize: function() { 
     Backbone.Model.prototype.initialize.apply(this, arguments); 

     this.on("change", function (model, options) { 
      if (options && options.save === false) return; 
      model.save({ 
       error: alertMe 
      }); 
     }); 

     this.on('fetch request', function (e) { 
      loadingOn(e); 
     }); 

     this.on('sync error', function (e) { 
      loadingOff(e); 
     }); 

     this.on('error', function(e, resp){ 
      alertMe(e, resp); 
     }); 
    } 
}); 

回答

1

將模型從服務器同步,無論wait選項的你應該不會收到第二變化事件。

save調用中的問題是您沒有指定attributes散列,即第一個參數。如果你沒有任何屬性進行修改,其考慮到你是射擊另存爲change事件,這可能的情況下,你將需要:

this.on("change", function (model, options) { 
     if (options && options.save === false) return; 
     model.save(null, {error: alertMe}); 
    }); 

什麼是實際發生的事情是,你是設置error作爲模型的一個屬性,並觸發了change事件。