Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 解析模型内外的大型json数据_Javascript_Backbone.js_Javascript Framework_Json - Fatal编程技术网

Javascript 解析模型内外的大型json数据

Javascript 解析模型内外的大型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

我有一个大型json服务器响应,它将模型嵌套在模型中。我无法使服务器基于rest。我需要将json树解析为集合和集合中的集合。然后,我想在修改后将相同json结构中的主干模型导出到服务器

我有一个名为sections的集合,并使用此方法将问题集合嵌套在每个section模型中:

json响应的顶层是节数组,因此我能够将其直接传递到节集合,然后使用initialize方法解析出子问题,然后从属性中删除它们。但这意味着我不会在sections集合的任何toJSON中返回model.questions

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 patching
Backbone.model.prototype.toJSON
,这样它将始终解析所有nestedCollections,并在返回之前将它们添加到JSON对象中

另一种方法是使用而不是嵌套模型(它自动处理toJSON,所以您不必考虑它)