我有一个heckuva时间理解文档的骨干关系;在哪个关系中加入像includeInJSON
这样的东西并不是100%清楚。也许最好通过说明我试图创建的结构来描述我的困惑。我有一个Venue
模型,它有0个或多个嵌套的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
在Address
中被序列化为venue
键,但在reverseRelation下,我将includeInJSON
留空,以便将完整的Address
(没有场地属性)序列化为Venue
的addresses
属性中的数组-如我所希望的-例如。正确吗?
出于同样的原因,我试图理解与join-style关系相关的相同概念。考虑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
抓取Organisation
的id
并将其插入organisationID
, Organisation
不序列化Venues
的任何列表)
提前感谢任何帮助-期待使用这个方便的库,在抓住我的眼球试图为Backbone.js编写我自己的关系胶:-)
(复制我的答案从https://github.com/PaulUithol/Backbone-relational/issues/37在这里,以便更多的人可以找到它)
我相信你现在已经弄清楚了,很抱歉这么晚才回复,但只是为了确定:选项(如collectionType
和includeInJSON
)适用于同一对象内的key
。
var Venue = Backbone.RelationalModel.extend({
relations: [
{
type: Backbone.HasMany,
key: 'addresses',
relatedModel: 'Address',
includeInJSON: true,
collectionType: 'Addresses',
reverseRelation: {
key: 'venue',
includeInJSON: 'id'
}
}
});
这将创建一个场地HasMany
addresses
。addresses
键对于任何给定的场地使用collectionType
Addresses
,并且是完全序列化的,因为includeInJSON
被设置为true
(并不是说includeInJSON
的默认值也是true
;所以如果你不指定它,它将完全序列化一个relation
或reverseRelation
)。
reverseRelation
只是采用相同的选项,仅在任何地址上的venue
键上应用它们。在这种情况下,它将只序列化它所链接的场地的venue.id
属性。