Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在关系主干中定义关系--不确定选项指向哪个方向?_Javascript_Json_Model View Controller_Backbone.js_Backbone Relational - Fatal编程技术网

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!感谢您发现我的双贴并花时间更新我的问题!