我试着测试 Backbone.js 集合的change事件,使用以下代码:
var Item = Backbone.Model.extend({});
var ItemCollection = Backbone.Collection.extend({
model: Item,
url: "data.json"
});
var collection = new ItemCollection();
collection.bind("change", function() {cosole.log("collection changed.");});
collection.fetch();
然后我手动更改json文件,并再次调用collection.fetch(),没有'change'事件发生,是因为我使用了本地json文件还是.fetch方法无法触发'change'事件?
2条答案
按热度按时间dldeef671#
因为提取集合会呼叫reset方法,所以会引发
reset
事件。fetch集合.fetch([选项])
....当模型数据从服务器返回时,集合将重置...
reset集合.reset(型号,[选项])
...使用reset将集合替换为新的模型列表(或属性散列),在结束时触发单个“reset”事件...
如果您在fetch方法中指定
{ add: true }
选项,则模型会加入至集合,而不是取代集合,因此会引发add
事件。change
事件在模型更改时触发,因此基本上是在模型上调用方法.set()
时触发。1u4esq0p2#
当其中一个集合属性变更时,会触发'change'事件。即使您自行变更了档案,我也无法在ItemCollection中找到任何档案属性。您拥有的两个属性是模型对象和字串。所以我猜这就是为何不会触发'change'事件的原因