Ответ 1
"Официальным" способом является переопределение метода parse:
http://documentcloud.github.com/backbone/#Model-parse
В вашем конкретном случае, что я, вероятно, сделаю, в методе parse, постройте вложенную коллекцию из данных col1, удалите ее из результатов, а затем передайте результаты. Затем базовая линия преобразует остальные данные в свойства.
Я не пробовал это, поэтому я не уверен на 100%, что он работает:
parse: function(response) {
this.col1 = new NestedCollection(response.col1);
delete response.col1
return response
}
Изменить: 28 ноября 2012
Вред указывает, что это может быть не лучший способ сделать это. Первоначальный ответ был написан довольно давно, и в исходном вопросе было указано, что пользователь хотел, чтобы коллекция была свойством модели (а не атрибутом), но вред имеет то значение, что наличие коллекции как атрибута является более приемлемым способ сделать это в наши дни.
Сегодня вы можете использовать что-то вроде Backbone-Relational для обработки большого количества этого материала для вас или, если вы хотите это сделать и у вас есть коллекция как атрибут модели, вы можете сделать что-то вроде:
Building = Backbone.Model.extend({
parse: function(response) {
console.log("Parse Called");
response.rooms = new Rooms(response.rooms);
return response;
}
});
Room = Backbone.Model.extend({});
Rooms = Backbone.Collection.extend({
model: Room
});
science_building = new Building();
science_building.fetch(
{success: function(model,resp) {console.log(resp);}}
);
С ответом выборки модели, например:
{ id: 1,
name: "Einstein Hall",
rooms: [
{id:101, name:'Chem Lab'},
{id:201, name:'Physics Lab'},
{id:205, name:'Bio Lab'}
]
}
Результирующая модель здания, которая позволяет:
science_building.get('rooms').get(101).get('name') // ==> "Chem Lab"
Рабочий пример jsFiddle: http://jsfiddle.net/edwardmsmith/9bksp/