boo*_*ean 16 javascript backbone.js
在页面加载时,我通过这种技术将我的数据引导到我的集合中.这很好用,但是我遇到了一个问题,我有子模型也需要进行投射.
例如,我返回一个名为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;
}
});
Run Code Online (Sandbox Code Playgroud)
现在我正在直接访问数据而不使用fetch,文档意味着我不再能够访问该parse方法.
如果我fetch在页面加载时没有使用或调用服务器,我如何使用Books> Pages示例来转换子模型?
ugl*_*nky 57
不确定这是否是新的,但看起来你也可以只将parse构造函数的options参数的属性设置为true,从而告诉构造函数使用你的parse方法:
modelInstance = new MyModel(obj, {parse: true});
Run Code Online (Sandbox Code Playgroud)
http://backbonejs.org/#Model-constructor
mu *_*ort 11
更新:这个答案现已过时,请参阅uglymunky的答案,了解更多最新信息.
你说得对,parse是唯一指定的被称为中fetch,这样就不会被当你建立从原始数据收集调用.
但是,由于您控制了用于引导集合的原始数据,因此您可以parse自己调用集合:
var c = new YourCollection(
YourCollection.prototype.parse([
// attribute data goes here...
])
);
Run Code Online (Sandbox Code Playgroud)
演示:http://jsfiddle.net/ambiguous/kdaZ3/
你的parse方法(集合和模型)不应该关心它们的调用上下文,所以直接从原型调用它们应该没问题.