在页面加载时,我通过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
或调用服务器,如何使用图书>来投射子模型?页面示例?
答案 0 :(得分:57)
不确定这是否是新的,但看起来您也可以将options参数的parse
属性设置为true,从而告诉构造函数使用您的parse方法:
modelInstance = new MyModel(obj, {parse: true});
答案 1 :(得分:11)
更新:此答案现已过期,请参阅uglymunky's answer了解更多最新信息。
你没错,parse
是only specified to be called during fetch
所以当你从原始数据构建一个集合时,它不会被调用。
但是,由于您控制了用于引导收藏的原始数据,因此您可以自己调用您的收藏集parse
:
var c = new YourCollection(
YourCollection.prototype.parse([
// attribute data goes here...
])
);
演示:http://jsfiddle.net/ambiguous/kdaZ3/
你的parse
方法(包括集合和模型)不应该关心它们的调用上下文,所以直接从原型中调用它们应该没问题。