4

Is there a way I can change attributes on a model without ever firing a change event? If you pass {"silent":true} right now, the next time an attribute is changed, the silent change event will be triggered. Can I change an attribute safely without the change event ever being triggered?

from change, Backbone 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);
stinkycheeseman
  • 43,437
  • 7
  • 30
  • 49

3 Answers3

11

You can change model attributes directly using model.attributes['xyz'] = 123.

abraham
  • 46,583
  • 10
  • 100
  • 152
5

I think the cleanest way if you really want to default to silent (but still be able to do silent:false) sets would be to override set. This should do it:

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);
    }
});
ggozad
  • 13,105
  • 3
  • 40
  • 49
0
item.set(
        {
           sum: sum
          ,income: income
       },
       {silent: true}
    );

since backbone 0.9.10

Bugs
  • 4,491
  • 9
  • 32
  • 41