Javascript 主干是否触发';改变';从本地文件加载数据时发生的事件?
我正在尝试使用以下代码测试主干集合的更改事件:Javascript 主干是否触发';改变';从本地文件加载数据时发生的事件?,javascript,backbone.js,Javascript,Backbone.js,我正在尝试使用以下代码测试主干集合的更改事件: 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
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(),没有发生任何“更改”事件,是因为我使用了本地json文件还是.fetch方法无法触发“更改”事件?因为获取集合调用重置方法,所以触发了一个
重置事件
fetchcollection.fetch([options])
.... 当模型数据从服务器返回时,集合将重置
重置集合.重置(型号[选项])
... 使用“重置”将集合替换为新的模型列表(或属性哈希),在末尾触发单个“重置”事件。
如果在fetch方法中指定选项{add:true}
,则会将模型添加到集合中,而不是替换它,因此会触发add
事件
change
事件在模型更改时触发,因此基本上是在对模型调用方法.set()
时触发的。当集合属性之一更改时,“change”事件将触发。
尽管您自己更改了文件,但我在项目集合中找不到任何文件属性。您拥有的两个属性是模型对象和字符串。因此我猜这就是为什么不会触发“更改”事件的原因。谢谢,因此更改事件主要用于客户端修改数据,从服务器更新数据时无法观察到,取回数据时需要设置重置处理程序,对吗?