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

mlnl4t2r  于 2022-11-10  发布在  其他
关注(0)|答案(3)|浏览(132)

在我的backbone.js应用程序中,有一个Trips collection保存Trip models,它与LocalStorage一起工作。我可以调用Trips.create(form_attributes)创建并保存到Todos store的旅行。
当我第一次加载我的应用程序时,我调用Trips.fetch({ success: trips_fetch_success })trips_fetch_success收到一个响应,显示Trips collection保存的Trip models
我已经尝试将refreshchange事件绑定到Trips collection,但是这些事件没有被捕获,这让我相信我对Trips.fetch触发的事件有错误的想法。
我的问题:Trips.fetch应该触发哪些事件?这些事件是在集合上触发的,还是在每个Trip models上触发的?

mbyulnm0

mbyulnm01#

Collection.fetch()将在成功时调用reset,这又将触发一个“reset”事件。集合重置事件的任何订阅者都将收到该事件。
这里的关键是“on success”。我遇到了这个问题,却发现 Backbone 网在默默地吞噬我的错误消息。传入一个错误处理程序,至少记录到console.log(),然后看看发生了什么:

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

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

siv3szwd

siv3szwd2#

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

trips.fetch({reset: true});
6ioyuze2

6ioyuze23#

从 Backbone.js 1.0开始,model.fetch()触发了一个“sync”,这就是你应该绑定的。
以下是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);
},

相关问题