Javascript 在关系主干中定义关系--不确定选项指向哪个方向?
我有一个赫库瓦的时间来理解;在哪个关系上添加诸如Javascript 在关系主干中定义关系--不确定选项指向哪个方向?,javascript,json,model-view-controller,backbone.js,backbone-relational,Javascript,Json,Model View Controller,Backbone.js,Backbone Relational,我有一个赫库瓦的时间来理解;在哪个关系上添加诸如includeInJSON之类的内容还不是100%清楚。也许最好通过说明我试图创建的结构来描述我的困惑。我有一个场馆模型,它有零个或多个嵌套的地址模型(1:n关系)。后端存储是MongoDB,它可以有嵌入式对象。我想以以下格式存储它: { id: 12345, label: 'OPUS Cafe Bistro', addresses: [ { type: 'mailing',
includeInJSON
之类的内容还不是100%清楚。也许最好通过说明我试图创建的结构来描述我的困惑。我有一个场馆
模型,它有零个或多个嵌套的地址
模型(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'
}
]
}
(请忽略丑陋的数据结构;为了简洁起见,我已经对其进行了调整。)现在我相信我已经建立了场馆
和地址
之间的关系,因此:
var Venue = Backbone.RelationalModel.extend({
relations: [
{
type: Backbone.HasMany,
key: 'addresses',
relatedModel: 'Address',
includeInJSON: false,
collectionType: 'Addresses',
reverseRelation: {
key: 'venue'
}
}
});
如果我理解正确,我将includeInJSON
设置为false,以防止场馆
被序列化到场馆
中,输入地址
,但在反向关联下,我将includeInJSON
保留为空,以获得完整的地址
(无场馆属性)在场馆
的地址
属性中序列化为数组–例如,根据我的建议。对吗
出于同样的原因,我试图理解与连接样式关系相关的相同概念。考虑<代码>地点<代码>现在有<代码>组织ID <代码>字段:
/* venue in JSON format */
{
id: 12345,
organisationID: 336,
label: 'OPUS Cafe Bistro',
addresses: []
}
/* and now for the organisation */
{
id: 336,
label: 'OPUS Entertainment Group'
}
使用文档中的示例,它们似乎更喜欢主干。有许多关系,我认为我必须建立组织
,因此:
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
}
}
]
});
。。。哪个应该序列化到上面的示例中,对吗?(即,场馆
抓取组织
的id
并将其插入组织id
,并且组织
不会序列化任何场馆的列表
)
提前感谢您提供的任何帮助–在尝试为Backbone.js编写自己的关系胶水后,我期待使用这个方便的库:-)(从这里复制我的答案,希望更多的人能找到它)
我相信您现在已经明白了,很抱歉这么晚才回复,但请确保:选项(如collectionType
和includeInJSON
)适用于同一对象中的键
因此,对于第一个示例,您可以将关系写成:
var Venue = Backbone.RelationalModel.extend({
relations: [
{
type: Backbone.HasMany,
key: 'addresses',
relatedModel: 'Address',
includeInJSON: true,
collectionType: 'Addresses',
reverseRelation: {
key: 'venue',
includeInJSON: 'id'
}
}
});
这将创建一个有许多
地址的场所
。任何给定场馆的地址
键使用集合类型
地址
,并且完全序列化,因为includeInJSON
设置为true
(并非includeInJSON
的默认值也是true
;因此,如果您不指定它,它将完全序列化关系
或反向关联
)
reverseRelation
只采用相同的选项,仅对任何地址上的vention
键应用它们。在这种情况下,它只会序列化它链接到的地点的vention.id
属性。wow!感谢您发现我的双贴并花时间更新我的问题!