2012-02-28 31 views
4

我试图测试骨干集合的变化时,使用此代码:在从本地文件加载数据时,骨干会触发“更改”事件吗?

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方法不能触发“更改”事件?

回答

8

因为读取集合调用重置方法,所以会触发一个reset事件。

collection.fetch([选项])
....当从服务器模型数据的回报,集合将重置 ...

重置collection.reset(型号,[选项])
...使用重置可将新集合替换为新的模型列表(或属性散列),触发一个“复位”事件在年底....

如果您在获取方法指定选项{ add: true },模型添加到集合而不是取代的它,所以一个add事件被解雇。当一个模式的转变,所以基本上当方法.set()上调用模型被触发


change事件。

+0

谢谢,所以change事件主要是为客户端修改数据,当从服务器更新数据时不能被观察到,而是在取数据的时候需要设置reset处理程序,对吗? – dencey 2012-02-28 09:50:06

+0

是的,这是它。 – 2012-02-28 09:55:05