【问题标题】:What events are triggered when calling fetch() on a Backbone.js collection?在 Backbone.js 集合上调用 fetch() 时会触发哪些事件?
【发布时间】:2011-07-12 23:07:48
【问题描述】:

在我的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 上触发?

【问题讨论】:

    标签: backbone.js


    【解决方案1】:

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

    这里的关键是“成功”。我遇到了这个问题,只是发现主干正在默默地吞下我的错误消息。传入一个至少记录到console.log() 的错误处理程序,然后看看发生了什么:

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

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

    【讨论】:

    • 您可以使用全局 jQuery ajax 错误处理程序来处理此类错误,通常与连接问题有关。
    • 从主干 0.5+,Collection#refreshwas renamedCollection#reset。该事件也相应地重命名。
    • 另外,知道reset 回调有两个默认参数"reset" (collection, options) 并且当集合的全部内容被替换时触发它很有用。`
    【解决方案2】:

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

    trips.fetch({reset: true});
    

    【讨论】:

    • 好点。当我希望刷新基于模型 fetch() 的视图时,我绑定到“同步”。这就是 1.0 中默认触发的。
    【解决方案3】:

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

    这是来自backbone.js 源的相关部分,其中触发了“同步”事件:

    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);
    },
    

    【讨论】:

    • 这是来自backbone.js 源代码的实际代码,顺便说一句。我只是重新阅读了我的评论并想知道我自己的代码是什么......最好是明确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    相关资源
    最近更新 更多