在为模型设置值时,我遇到了一个问题。
这是我的代码:
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
选项的目的。