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

sti*_*man 4 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);
Run Code Online (Sandbox Code Playgroud)

abr*_*ham 11

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


ggo*_*zad 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);
    }
});
Run Code Online (Sandbox Code Playgroud)