【问题标题】:Backbone fetch collection lifecycle, set property from response骨干获取集合生命周期,从响应中设置属性
【发布时间】:2013-09-28 06:09:00
【问题描述】:

问题:

Backbone 中集合的标准 fetch 方法的生命周期是什么?即触发了哪些事件/方法以及以什么顺序?

上下文:

我从服务器收到的关于我的集合的 JSON 响应有一个模型数组和一个属性:

{
    results: [model1, model2],
    aProperty: "example"
}

我想从 JSON 响应中读取此属性并将其设置为 Collection 上的属性。我目前正在重写解析函数:

parse: function(response, options) {
    this.aProperty = response.aProperty;
    return response.results;
}

这感觉像是在集合中设置属性的错误位置 - 解析函数有一个特定的工作,并且发生在模型数组被验证之前。

我也试过了:

initialize: function() {
    this.on('sync', function(collection, resp) {
        collection.aProperty = resp.aProperty;
    });
}

但是,在获取成功回调之后调用“同步”(我需要在成功回调之前将属性设置为获取的一部分)。

【问题讨论】:

    标签: javascript backbone.js backbone-events


    【解决方案1】:

    在阅读了一些源代码之后,我认为您想要做的是在request 事件上捕获它。在Backbone.sync中的模型上触发:

    model.trigger('request', model, xhr, options);
    

    在这里,您可以覆盖作为请求的一部分发送的回调,用您想要进行的更改包装它。我没有对此进行测试,但也许这可以给你一个想法:

    this.on('request', function(model, xhr, options) {
       var success;
       success = options.success;
       options.success = function(resp) {
            model.aProperty = resp.aProperty;
            success();
       }
    });
    

    查看annotated backbone source documentation。特别是Backbone.sync 上的位会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-02
      • 1970-01-01
      • 2012-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多