【问题标题】:Saving nested collections within a model using backbone.js使用backbone.js在模型中保存嵌套集合
【发布时间】:2013-05-27 13:49:57
【问题描述】:

我在让 Backbone 保存多层集合时遇到了一些问题。我有以下型号:

    var Question = Backbone.Model.extend({
        urlRoot: "/question"
    });

    var QuestionList = Backbone.Collection.extend({
        model: Question,
        url: "/question",
        parse: function(response) {
            return response.objects;
        }
    });

    var QuestionBank = Backbone.Model.extend({
        urlRoot: "/questionbank"
    });

    var QuestionBankList = Backbone.Collection.extend({
        model:QuestionBank,
        url: "/questionbank",
        parse: function(response) {
            return response.objects;
        }
    });

    var Answer = Backbone.Model.extend({
        urlRoot: "/answer"
    })

    var AnswerList = Backbone.Collection.extend({
        model: Answer,
        url: "/answer",
        parse: function(response) {
            return response.objects;
        }
    });

一个题库有很多问题,一个问题有很多答案。 当我保存我的集合时,模型是正确的,但发出的 JSON 不包括第二级集合(答案):

{"active_question_bank": true, "id":
 "51a8c5d72ace7a458fd0d000", "question_bank_name": "New Q", "questions": 
[{"active_question": true, "answers": [], "difficulty": null, 
"id": "51a8d1be2ace7a458fd0d008", "question": "What is your favorite Color?", 
"question_is_and_type": false, "question_type": 1, "resource_uri": 
"/question/51a8d1be2ace7a458fd0d008", "tags": [""]}], "resource_uri": 
"/questionbank/51a8c5d72ace7a458fd0d000"}

特别是它每次都会发送一个空白的“答案”:[]。我对骨干比较陌生,所以这也许是一项不可能完成的任务,但这个概念似乎相当微不足道。

【问题讨论】:

    标签: mongodb backbone.js tastypie


    【解决方案1】:

    尝试按照以下模式定义模型和集合,然后检查发送到服务器的 JSON。

    var Answer = Backbone.Model.extend({
        urlRoot: "/answer",
    });
    
    var AnswerCollection = Backbone.Collection.extend({
        model: Answer,
        urlRoot: "/answer",
    });
    
    // a question can contain many answers which can be accessed via AnswerList
    var Question = Backbone.Model.extend({
        urlRoot: "/question",
        defaults: {
           AnswerList: new AnswerCollection(),
        },
        parse: function(response) {
            response.AnswerList= new AnswerCollection(response.AnswerList);
            return response;
        }
    });
    
    var QuestionCollection = Backbone.Collection.extend({
        model: Question,
        url: "/question",
    });
    
    // question-bank contains many questions which can be accessed via QuestionList
    var QuestionBank = Backbone.Model.extend({
        urlRoot: "/questionbank",
        defaults: {
           QuestionList: new QuestionCollection(),
        },
        parse: function(response) {
            response.QuestionList = new QuestionCollection(response.QuestionList);
            return response;
        }
    });
    

    【讨论】:

    • 这实际上很有帮助,尽管我发现主要问题是我使用 Tastypie,而不是在 Backbone 中。我会将其标记为答案,因为这确实有效。
    猜你喜欢
    • 2012-11-18
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2011-12-19
    相关资源
    最近更新 更多