在Backbone.js集合上调用fetch()时会触发什么事件?

在我的backbone.js应用程序中,有一个Trips collection ,它包含了与LocalStorage一起工作的Trip models 。 我可以调用Trips.create(form_attributes)创build并保存到Todos store的旅程。

当我第一次加载我的应用程序时,我打电话给Trips.fetch({ success: trips_fetch_success }) ,并且trips_fetch_success接收一个响应,显示Trips collection保存的Trip models

我试图将refreshchange事件绑定到Trips collection ,但是这些事件没有被捕获,使我相信我对Trips.fetch触发哪些事件有错误的想法。

我的问题: Trips.fetch触发哪些事件? 并且是在收集或每个单独的Trip models上触发的事件?

Collection.fetch()将在成功时调用reset ,这将触发“重置”事件。 collections重置事件的任何订阅者都应该收到该事件。

这里的关键是“成功”。 我有这个问题,只能发现骨干无声地吞咽了我的错误信息。 传入一个error handling程序,至lesslogging到console.log() ,看看发生了什么:

 trips.fetch({error: function() { console.log(arguments); }}); 

(注意:backbone.js的旧版本会触发“刷新”而不是“重置”)

如果您使用backbone 1.0,则需要在fetch()调用中传递reset:true以便与重置事件绑定:

 trips.fetch({reset: true}); 

从主干1.0开始,model.fetch()触发“同步”。 这就是你应该绑定的。

 fetch: function(options) { options = options ? _.clone(options) : {}; if (options.parse === void 0) options.parse = true; var model = this; var success = options.success; options.success = function(resp) { if (!model.set(model.parse(resp, options), options)) return false; if (success) success(model, resp, options); // HERE'S THE TRIGGER! model.trigger('sync', model, resp, options); }; wrapError(this, options); return this.sync('read', this, options); },