Javascript 解析模型内外的大型json数据
我有一个大型json服务器响应,它将模型嵌套在模型中。我无法使服务器基于rest。我需要将json树解析为集合和集合中的集合。然后,我想在修改后将相同json结构中的主干模型导出到服务器 我有一个名为sections的集合,并使用此方法将问题集合嵌套在每个section模型中: json响应的顶层是节数组,因此我能够将其直接传递到节集合,然后使用initialize方法解析出子问题,然后从属性中删除它们。但这意味着我不会在sections集合的任何toJSON中返回model.questionsJavascript 解析模型内外的大型json数据,javascript,backbone.js,javascript-framework,json,Javascript,Backbone.js,Javascript Framework,Json,我有一个大型json服务器响应,它将模型嵌套在模型中。我无法使服务器基于rest。我需要将json树解析为集合和集合中的集合。然后,我想在修改后将相同json结构中的主干模型导出到服务器 我有一个名为sections的集合,并使用此方法将问题集合嵌套在每个section模型中: json响应的顶层是节数组,因此我能够将其直接传递到节集合,然后使用initialize方法解析出子问题,然后从属性中删除它们。但这意味着我不会在sections集合的任何toJSON中返回model.question
SCC.Models.Section = Backbone.Model.extend({
initialize: function() {
var questions = this.get('questions');
this.questions = new SCC.Collections.Questions(questions);
delete this.attributes.questions;
}
});
SCC.Collections.Sections = Backbone.Collection.extend({
model: SCC.Models.Section
});
SCC.Sections = new SCC.Collections.Sections();
//imagine window.SectionData is the server response
SCC.Sections.reset(window.SectionData);
希望我清楚。如果你需要更多信息,请告诉我
谢谢。如果您控制的嵌套模型数量有限,且不会频繁更改,那么简单的方法是为具有嵌套集合的模型重写
toJSON()
方法:
SCC.Models.Section = Backbone.Model.extend({
initialize: function() {
var questions = this.get('questions');
this.questions = new SCC.Collections.Questions(questions);
delete this.attributes.questions;
},
toJSON: function() {
var json = Backbone.Model.prototype.toJSON.call(this);
json.questions = this.questions.toJSON()
return json
}
});
然而,若你们有很多嵌套的集合,这些集合可能会发生变化,那个么采用更抽象的方式就更好了
例如,我可以考虑将所有嵌套集合存储在模型的特殊属性(比如nestedCollections
)中,然后使用monkey patchingBackbone.model.prototype.toJSON
,这样它将始终解析所有nestedCollections,并在返回之前将它们添加到JSON对象中
另一种方法是使用而不是嵌套模型(它自动处理toJSON,所以您不必考虑它)