1

问题:

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

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

4

1 回答 1

0

在阅读了一些源代码之后,我认为您想要做的就是在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();
   }
});

查看带注释的主干源文档。特别是Backbone.sync上的内容会有所帮助。

于 2013-09-23T11:12:35.710 回答