Jon*_*sch 25 javascript json backbone.js
是否可以在模型中嵌套集合?
我知道您可以在模型的初始化回调中创建新集合,并创建可以在集合和父模型之间来回传递的引用.但是可以将集合设置为模型的一部分,这样它导出的JSON看起来像这样:
{
blah: 'blah',
myCollection: [
{
foo: 'asdf',
bar: 'qwer'
},
{
foo: 'asdf123',
bar: 'qwer123'
}
]
}
Run Code Online (Sandbox Code Playgroud)
如果没有,您如何处理将具有相关集合的模型同步到后端?您是否必须利用主干的同步并重建JSON或者是否有更无缝的东西?
对不起,如果这个问题已经在其 我环顾四周,看到了一些解决方法,但没有什么能真正解决我正在寻找的问题.
Elf*_*erg 30
有两种方法.第一个是定义获取所有内容的根模型.您可以覆盖它parse()为嵌套属性创建子集合和子模型的toJSON()方法,并覆盖该方法以转换回适合保存到服务器的JSON结构.
对于小的子集合,这是完全可以接受的.这需要一些编程,但是如果你能阅读Backbone源代码,那么该怎么做应该是,不是很明显,但至少可以理解.
或者您可以使用Backbone Relational,它可以为您完成所有工作.
雷纳托很接近,但"有"和"定"将不可用.我相信Reckoner指出了部分原因.此外,您需要从响应中删除该属性,否则它将覆盖默认值.
_.extend(Backbone.Model.prototype, {
parse: function(resp, xhr) {
var attr, model, models, collection, options;
for (var prop in resp) {
if (this.defaults && this.defaults[prop]) {
attr = this.defaults[prop];
if (attr instanceof Backbone.Model) {
model = attr.clone();
model.set(resp[prop]);
resp[prop] = model;
} else if (attr instanceof Backbone.Collection) {
models = attr.map(function (model) { return model.clone(); });
options = _.clone(attr.options);
collection = new attr.constructor(models, options);
collection.add(resp[prop]);
resp[prop] = collection;
}
}
}
return resp;
}
});
Run Code Online (Sandbox Code Playgroud)
希望能帮助别人.
| 归档时间: |
|
| 查看次数: |
12883 次 |
| 最近记录: |