我有一个heckuva时间了解documentation for Backbone-Relational;关于添加includeInJSON
等内容的关系并不是100%明确。可能最好通过说明我想要创建的结构来描述我的困惑。我有一个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
的{{1}}属性中将完整的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
的{{1}}并将其插入Organisation
,而id
不会序列化organisationID
的任何列表
提前感谢任何帮助 - 期待使用这个方便的库,在抓住我的眼球试图为Backbone.js编写我自己的关系粘合剂后: - )
答案 0 :(得分:4)
(将https://github.com/PaulUithol/Backbone-relational/issues/37的答案复制到此处,以便更多人可以找到它)
我相信你现在已经弄明白了,很抱歉这么晚回复,但只是为了确定:选项(如collectionType
和includeInJSON
)适用于{{1}那是在同一个对象中。
因此,对于您的第一个示例,您可以将关系编写为:
key
这会创建一个var Venue = Backbone.RelationalModel.extend({
relations: [
{
type: Backbone.HasMany,
key: 'addresses',
relatedModel: 'Address',
includeInJSON: true,
collectionType: 'Addresses',
reverseRelation: {
key: 'venue',
includeInJSON: 'id'
}
}
});
HasMany
的地点。任何给定Venue的addresses
密钥都使用addresses
collectionType
,并且已完全序列化,因为Addresses
设置为includeInJSON
(而不是true
的默认值{1}}也是includeInJSON
;因此,如果您没有指定它,它将完全序列化true
或relation
。
reverseRelation
只使用相同的选项,仅对任何地址的reverseRelation
键应用它们。在这种情况下,它只会序列化链接到的场地的venue
属性。