У меня чертовски много времени на изучение документации для Backbone-Relational; не на 100% ясно, к какому отношению добавлять такие вещи, как includeInJSON
. Вероятно, лучше всего описать мое замешательство, проиллюстрировав структуру, которую я пытаюсь создать. У меня есть модель Venue
, которая имеет ноль или более вложенных моделей Address
(отношение 1:n). Бэкенд-хранилищем является MongoDB, в котором могут быть встроенные объекты. Я хотел бы сохранить его в этом формате:
{
id: 12345,
label: 'OPUS Cafe Bistro',
addresses: [
{
type: 'mailing',
address1: '#52 - 650 Duncan Ave',
city: 'Penticton, BC'
},
{
type: 'main',
address1: '#106 - 1475 Fairview Rd',
city: 'Penticton, BC'
}
]
}
(Пожалуйста, не обращайте внимания на уродливые структуры данных; я изменил его для краткости.) Теперь я считаю, что установил связь между Venue
и Address
таким образом:
var Venue = Backbone.RelationalModel.extend({
relations: [
{
type: Backbone.HasMany,
key: 'addresses',
relatedModel: 'Address',
includeInJSON: false,
collectionType: 'Addresses',
reverseRelation: {
key: 'venue'
}
}
});
Если я правильно понимаю, я установил для includeInJSON
значение false, чтобы предотвратить сериализацию Venue
в ключ venue
в Address
, но в reverseRelation я оставляю includeInJSON
пустым, чтобы полное Address
(без свойства места проведения) сериализовалось как массив в свойстве addresses
объекта Venue
— как, например, я надеялся. Правильный?
Точно так же я пытаюсь понять ту же концепцию в отношении отношений в стиле соединения. Учтите, что Venue
теперь имеет поле organisationID
:
/* venue in JSON format */
{
id: 12345,
organisationID: 336,
label: 'OPUS Cafe Bistro',
addresses: []
}
/* and now for the organisation */
{
id: 336,
label: 'OPUS Entertainment Group'
}
Используя примеры в документации, которые, кажется, предпочитают отношения Backbone.HasMany
, я думаю, что мне нужно настроить Organisation
таким образом:
var Organisation = Backbone.RelationalModel.extend({
relations: [
{
type: Backbone:HasMany,
key: 'venues',
relatedModel: 'Venue',
includeInJSON: Backbone.Model.prototype.idAttribute,
collectionType: 'Venues',
reverseRelation: {
key: 'organisationID',
includeInJSON: false
}
}
]
});
... который должен сериализоваться в приведенный выше пример, верно? (То есть, Venue
захватывает id
Organisation
и вставляет его в organisationID
, а Organisation
не сериализует список Venues
)
Заранее спасибо за любую помощь — с нетерпением жду возможности использовать эту удобную библиотеку после того, как выцарапал себе глаза, пытаясь написать свой собственный реляционный клей для Backbone.js :-)