2012-03-22 67 views
4

有沒有方法可以改變模型上的屬性而不會發生更改事件?如果您現在通過{"silent":true},下次更改屬性時,將會觸發沉默更改事件。如果不觸發更改事件,我可以安全地更改屬性嗎?在Backbone.js中默默地改變模型屬性?

從變化,骨幹0.9.2:

// Silent changes become pending changes. 
for (var attr in this._silent) this._pending[attr] = true; 

// Silent changes are triggered. 
var changes = _.extend({}, options.changes, this._silent); 
this._silent = {}; 
for (var attr in changes) { 
    this.trigger('change:' + attr, this, this.get(attr), options); 

回答

5

我認爲最乾淨的方式,如果你真的想默認沉默(但仍然能夠做沉默:假)集將覆蓋set。這應做到:

var SilentModel = Backbone.Model.extend({ 

    set: function(attrs, options) { 
     options = options || {}; 
     if (!('silent' in options)) { 
      options.silent = true; 
     } 
     return Backbone.Model.prototype.set.call(this, attrs, options); 
    } 
}); 
+0

{silent:true}延遲個體更改的問題:attr事件在Backbone 0.9.10中得到了修復。 – parliament 2013-07-28 22:32:33

11

您可以更改模型屬性直接使用model.attributes['xyz'] = 123

+0

哇,這真的做到了。很簡單。 – PanosJee 2013-01-09 10:10:38

+1

我聽到有幾個人建議不要觸摸'attributes'變量。但它似乎在做這項工作。這樣做有沒有真正的和實用的缺點? – cherouvim 2015-05-28 07:49:56

+0

@cherouvim我認爲唯一的缺點就是我們想要的 - 沒有事件。 – Mati 2016-09-08 07:17:59

0
item.set(
     { 
      sum: sum 
      ,income: income 
     }, 
     {silent: true} 
    ); 

因爲骨幹0.9.10