Если у вас есть ограниченное количество вложенных моделей, которые находятся под вашим контролем и не подвержены частым изменениям, простой способ - переопределить метод 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
, чтобы он всегда анализировал все nestedCollections и добавлял их в объект JSON перед его возвратом.
Другим способом было бы использование Реляционная магистраль вместо вложенных моделей (он автоматически обрабатывает JSON, поэтому вам не придется об этом думать).