我已经粘贴了下面的代码,当数据被推入模型中已经存在的数组时,'on change'没有触发,但是当整个数组被重置时,它会被触发。
var BookModel = Backbone.Model.extend({
defaults : {
"subject" : [0,4]
},
initialize : function() {
this.on('change',this.fetchResults);
},
fetchResults : function() {
console.log("fetch");
}
});
var myModel = new BookModel();
var subjects = myModel.get('subject');
subjects.push(2); //fetch does not get called
//subjects = []; //fetch gets called
myModel.set({"subject": subjects});
答案 0 :(得分:6)
当值实际更改时,Backbone会触发更改事件。 myModel.get('subject')
产生对数组的引用。然后,您使用myModel.set({"subject": subjects})
修改并设置它,但它是相同的引用:值未更改,事件未被触发。
var subjects = _.clone(myModel.get('subject'));
subjects.push(2);
myModel.set({"subject": subjects});
或
var subjects = myModel.get('subject').slice();
subjects.push(2);
myModel.set({"subject": subjects});
在相关的说明中,使用默认值中的数组将导致实例之间的共享数组。在这种情况下,我建议使用函数来构建默认值:
var BookModel = Backbone.Model.extend({
defaults: function() {
return {
"subject": [0, 4]
}
}
});