【问题标题】:parse() a Backbone collection without calling the model parse()parse() 一个 Backbone 集合而不调用模型 parse()
【发布时间】:2014-01-17 16:39:28
【问题描述】:

我在基本集合和基本模型上都使用自定义 parse() 方法来处理服务器返回的所有包装。

我的问题是集合在每个模型上都调用了 parse() ,这不是必需的,我只需要在从模型而不是集合中获取时解析模型。

我应该以某种方式更改 fetch 还是有其他选择?我发现了一些关于 parse = true 选项的 cmets,但没有关于它的真实文档。

// Base class for all models
module.exports = Backbone.Model.extend({
    parse: function(response) {
        var retrocycled = JSON.retrocycle(JSON.parse(JSON.stringify(response)));
        this.statusResp = retrocycled.status;
        this.messageResp = retrocycled.message;
        return retrocycled.data;
    }
});

我的集合在解析时大致相同,但它的作用并不重要,我只需要它们仅在我猜它们是获取的时候解析。

谢谢!

【问题讨论】:

    标签: backbone.js backbone.js-collections backbone-model


    【解决方案1】:

    如果您查看 Backbone 源代码 line 256 specifically,您会看到在创建新模型时调用了 parse(如果存在)。

    当您将模型添加到集合时,它会从服务器获取响应,并且对于其中的每个项目,它只会使用该数据生成一个新模型。

    但是,集合本身也有一个被调用的 parse 方法。

    但您正在寻找的是对Model#parse 的有条件调用,具体取决于上下文。这里的问题是,当创建模型时,它不知道您是作为独立模型还是作为创建集合的上下文的一部分。

    您必须设计模型解析方法来内省response 并确定它是否需要额外处理。如果没有,只需返回响应。如果是这样,做你的工作,然后返回“固定”响应。

    【讨论】:

    • 是的,我想过,但我想知道是否有另一种更具体的方法,而不是仅仅尝试分析响应以推断上下文,也许有人会想出另一个想法。无论如何感谢您的可靠答案!
    • 我同意@zetsubo,如果有更好的方法,我会很高兴的。
    猜你喜欢
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多