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

Ala*_*cia 68 backbone.js

在我的backbone.js应用程序中,有一个Trips collection持有Trip models,正在使用LocalStorage.我可以打电话Trips.create(form_attributes)来创建和保存旅行Todos store.

当我第一次加载我的应用程序,我打电话Trips.fetch({ success: trips_fetch_success })trips_fetch_success接收,显示的响应Trip modelsTrips collection成立.

我试图绑定refreshchange事件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将触发"刷新"而不是"重置")

  • 从主干0.5+开始,`Collection#refresh` [被重命名](http://documentcloud.github.com/backbone/#changelog)改为`Collection#reset`.该事件也相应地重命名. (9认同)
  • 您可以使用全局jQuery ajax错误处理程序来处理此类错误,通常与连接问题有关. (4认同)

jes*_*sal 52

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

trips.fetch({reset: true});
Run Code Online (Sandbox Code Playgroud)

  • 好点子.当我希望基于模型fetch()刷新视图时,我绑定到'sync'.这是1.0中默认触发的内容. (6认同)

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)

  • 这是来自backbone.js源码的实际代码,顺便说一下.我只是重新阅读了我的评论,并想知道代码是我自己的......最好是明确的. (2认同)