backbone.js - 使用parse而不调用fetch

时间:2012-06-17 04:48:54

标签: javascript backbone.js

在页面加载时,我通过this technique将我的数据引导到我的馆藏。这很好用,但是我遇到了一个问题,我有子模型也需要进行投射。

例如,我返回一个名为Book的JSON集合,每个book数组包含10-20个自称为Pages的模型。如果我尝试直接访问Pages,我会收到[object][object]错误,因为Backbone无法确定它是什么类型的对象。

以前当我使用fetch时,我会通过使用包含parse操作的集合来解决这个问题。在parse我会做类似的事情:

Collection_Books = Backbone.Collection.extend({
    model: Model_Book,
    parse: function (response) {
        response.Pages = new Collection_Pages(response.Pages);
        return response;
    }
});

现在我正在直接访问数据而不使用fetch,文档暗示我无法再访问parse方法。

如果我在页面加载时没有使用fetch或调用服务器,如何使用图书>来投射子模型?页面示例?

2 个答案:

答案 0 :(得分:57)

不确定这是否是新的,但看起来您也可以将options参数的parse属性设置为true,从而告诉构造函数使用您的parse方法:

modelInstance = new MyModel(obj, {parse: true});

http://backbonejs.org/#Model-constructor

答案 1 :(得分:11)

更新:此答案现已过期,请参阅uglymunky's answer了解更多最新信息。


你没错,parseonly specified to be called during fetch所以当你从原始数据构建一个集合时,它不会被调用。

但是,由于您控制了用于引导收藏的原始数据,因此您可以自己调用您的收藏集parse

var c = new YourCollection(
    YourCollection.prototype.parse([
        // attribute data goes here...
    ])
);

演示:http://jsfiddle.net/ambiguous/kdaZ3/

你的parse方法(包括集合和模型)不应该关心它们的调用上下文,所以直接从原型中调用它们应该没问题。