Backbone fetch collection生命周期,从响应中设置属性

时间:2013-09-23 11:05:29

标签: javascript backbone.js backbone-events

问题:

Backbone中集合的标准获取方法的生命周期是什么?什么事件/方法被解雇,以什么顺序?

上下文:

我从服务器收到的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;
    });
}

然而,在获取成功回调之后调用'sync'(我需要在成功回调之前将属性设置为fetch的一部分)。

1 个答案:

答案 0 :(得分: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();
   }
});

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