【问题标题】:parsing large json data in and out of models解析模型输入和输出的大型 json 数据
【发布时间】:2011-10-26 00:33:36
【问题描述】:

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

我有一个名为sections的集合,并使用此方法将问题集合嵌套在每个section模型中: http://documentcloud.github.com/backbone/#FAQ-nested

json 响应的顶层是部分数组,因此我能够将其直接传递给部分集合,然后我使用初始化方法解析出子问题,然后从属性中删除它们。但这意味着我没有在 section 集合的任何 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);

希望我很清楚。如果您需要更多信息,请告诉我。

谢谢。

【问题讨论】:

    标签: javascript backbone.js javascript-framework json


    【解决方案1】:

    如果您控制的嵌套模型数量有限且不会经常更改,那么简单的方法是为具有嵌套集合的模型覆盖 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),然后猴子修补Backbone.Model.prototype.toJSON,以便它始终解析所有嵌套集合并将它们添加到 JSON 对象,然后再返回它。

    另一种方法是使用Backbone relational 而不是嵌套模型(它会自动处理 toJSON,因此您不必考虑它)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      • 2018-06-28
      • 2017-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多