Saving nested collections to models using backbone.js

I'm having trouble backbone saving multiple layers of collections. I have the following models:

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; } }); 

The question bank has many questions, and the question has many answers. When I save my collection, the model is correct, but the sent JSON does not include the second collection level (responses):

 {"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"} 

In particular, it sends empty "answers": [] every time. I am relatively new to the highway, so maybe this is an impossible task, but the concept seems pretty trivial.

+4
source share
1 answer

Try defining models and collections in the following template, and then check for JSON sending to the server.

 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; } }); 
+4
source

Source: https://habr.com/ru/post/1483838/


All Articles