真正在Backbone.js中静默更改模型属性?

时间:2012-03-22 18:35:13

标签: backbone.js

有没有办法可以在不触发更改事件的情况下更改模型上的属性?如果您立即传递{"silent":true},则下次更改属性时,将触发静默更改事件。如果没有触发更改事件,我可以安全地更改属性吗?

来自变更,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);

3 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分: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);
    }
});

答案 2 :(得分:0)

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

因为骨干0.9.10