在我的backbone.js应用程序中,有一个Trips collection
持有Trip models
,正在使用LocalStorage
.我可以打电话Trips.create(form_attributes)
来创建和保存旅行Todos store
.
当我第一次加载我的应用程序,我打电话Trips.fetch({ success: trips_fetch_success })
和trips_fetch_success
接收,显示的响应Trip models
的Trips collection
成立.
我试图绑定refresh
和change
事件Trips collection
,但这些事件没有被捕获,让我相信我对哪些事件Trips.fetch
触发了错误的想法.
我的问题:应该Trips.fetch
触发哪些事件?是在集合上还是在每个人身上触发事件Trip models
?
Elf*_*erg 59
Collection.fetch()
将呼吁reset
成功,这反过来将触发'重置'事件.集合重置事件的任何订阅者都应该收到该事件.
这里的关键是"成功".我遇到了这个问题,却发现骨干网正在默默地吞下我的错误信息.传递一个错误处理程序,至少记录到console.log()
,并查看发生了什么:
trips.fetch({error: function() { console.log(arguments); }});
Run Code Online (Sandbox Code Playgroud)
(注意:旧版本的backbone.js将触发"刷新"而不是"重置")
jes*_*sal 52
如果您使用的是主干1.0,则需要在fetch()调用中传递reset:true以便与reset事件绑定:
trips.fetch({reset: true});
Run Code Online (Sandbox Code Playgroud)
Per*_*Tew 20
从骨干1.0开始,model.fetch()触发'同步'.这就是你应该绑定的东西.
这是来自backbone.js源的相关部分,其中触发了'sync'事件:
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);
},
Run Code Online (Sandbox Code Playgroud)