在为模型设置值时,我遇到了一个问题。

这是我的代码:

SuperModel = Backbone.Model.extend({

    initialize: function() {
        //some code......
    }
});

ChildModel = SuperModel.extend({

    initialize: function() {

        //some code..........
        SuperModel.prototype.initialize.call(this, arguments);
    }
});


在我看来,我尝试使用{ silent : true }为模型(childModel的实例)设置一个值。

使用ModelBinder将模型与视图绑定。

this.model.set('firstName','tom',{silent:true}); // Not Working
this.model.set('firstName','tom'); //  Working
this.model.set('firstName','tom',{silent:true}).trigger('change'); // Not Working


当我删除SuperModel.prototype.initialize.call(this,arguments);时,silent:true正在工作(将值开始设置为UI)。

在这里,我可以看到模型中的值,但没有反映在UI上。

最佳答案

首先,如果要将arguments传递给其父initialize函数,则需要使用apply而不是call

SuperModel.prototype.initialize.apply(this, arguments);


然后,如果您通过{ silent: true },则不会触发the Backbone's events。如果要稍后模拟事件,则应正确模拟它们:

var options = { silent: true },
    value = 'tom';

this.model.set('firstName', value, options);
this.model.trigger('change:firstName', this.model, value, options)
          .trigger('change', this.model, options);


但这违反了silent选项的目的。

07-24 15:59