在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
。
我试图将refresh
和change
事件绑定到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); },