主干提取集合生命周期,从响应设置属性

Backbone fetch collection lifecycle, set property from response

本文关键字:响应 设置 属性 周期 提取 集合 生命      更新时间:2023-09-26

问题:

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

上下文:

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

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

我想从 JSON 响应中读取此属性,并将其设置为集合上的属性。我目前正在覆盖解析函数:

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

这感觉就像在集合中设置属性的错误位置 - parse 函数具有特定的作业,并且在验证模型数组之前发生。

我也尝试过:

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

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

在阅读了一些源代码之后,我认为您要做的是在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上的位会有所帮助。