当从本地文件加载数据时,Backbone是否触发“更改”事件?

bvjxkvbb  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(149)

我试着测试 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'事件?

dldeef67

dldeef671#

因为提取集合会呼叫reset方法,所以会引发reset事件。

fetch集合.fetch([选项])

....当模型数据从服务器返回时,集合将重置...

reset集合.reset(型号,[选项])

...使用reset将集合替换为新的模型列表(或属性散列),在结束时触发单个“reset”事件...
如果您在fetch方法中指定{ add: true }选项,则模型会加入至集合,而不是取代集合,因此会引发add事件。
change事件在模型更改时触发,因此基本上是在模型上调用方法.set()时触发。

1u4esq0p

1u4esq0p2#

当其中一个集合属性变更时,会触发'change'事件。即使您自行变更了档案,我也无法在ItemCollection中找到任何档案属性。您拥有的两个属性是模型对象和字串。所以我猜这就是为何不会触发'change'事件的原因

相关问题