16

在页面加载时,我通过这种技术将我的数据引导到我的集合中。这很好用,但我遇到了一个问题,我有子模型也需要转换。

例如,我返回一个名为 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在页面加载时没有使用或调用服务器,如何使用 Books > Pages 示例转换子模型?

4

2 回答 2

57

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

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

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

于 2013-02-19T05:32:03.320 回答
11

更新:这个答案现在已经过时了,有关更多最新信息,请参阅uglymunky 的答案。


您是对的,parse指定在期间调用,fetch因此当您从原始数据构建集合时不会调用它。

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

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

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

您的parse方法(集合和模型)不应该关心它们的调用上下文,因此直接从原型调用它们应该没问题。

于 2012-06-17T05:24:38.033 回答