2012-03-22 9 views
4

変更イベントを発生させずにモデルの属性を変更する方法はありますか?今すぐ{"silent":true}を渡すと、次に属性が変更されたときにサイレント変更イベントがトリガーされます。変更イベントがトリガーされることなく、属性を安全に変更できますか?Backbone.jsでモデル属性を静かに変更しますか?

変更、バックボーン0.9.2から

:あなたは、モデルが直接model.attributes['xyz'] = 123を使用して属性を変更することができます

// 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

11

+0

うわー、以来。とても簡単。 – PanosJee

+1

私は '属性'変数に触れないように助言している人がいると聞いたことがあります。しかし、それは仕事をするようです。そうすることに本当の実用的な欠点はありますか? – cherouvim

+0

@cherouvim唯一の欠点はまさに私たちが望むものだと思う。 – Mati

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

本当にそれをやったバックボーン0.9.10