首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Backbone-Relational中定义关系--不确定选项指向哪个方向?

在Backbone-Relational中定义关系--不确定选项指向哪个方向?
EN

Stack Overflow用户
提问于 2011-10-05 08:11:22
回答 1查看 3.1K关注 0票数 3

我花了一段时间来理解documentation for Backbone-Relational;还不是100%清楚应该添加像includeInJSON这样的东西。也许最好通过说明我试图创建的结构来描述我的困惑。我有一个包含零个或多个嵌套Address模型的Venue模型(1:n关系)。后端存储是MongoDB,它可以有嵌入的对象。我想以这样的格式存储它:

代码语言:javascript
复制
{
    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'
        }
    ]
}

(请忽略丑陋的数据结构;为了简洁,我对其进行了调整。)现在,我想我是这样设置了VenueAddress之间的关系:

代码语言:javascript
复制
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 (没有场所属性)序列化为Venueaddresses属性中的数组-例如,正如我所希望的那样。对,是这样?

出于同样的原因,我正在尝试理解与连接样式关系相关的相同概念。假设Venue现在有一个organisationID字段:

代码语言:javascript
复制
/* 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

代码语言:javascript
复制
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获取Organisationid并将其插入到organisationID中,而Organisation不序列化任何Venues列表)

提前感谢您的帮助-期待使用这个方便的库,在尝试为Backbone.js编写我自己的关系胶水之后,我非常期待使用这个库:-)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-02 18:24:26

(将我的答案从https://github.com/PaulUithol/Backbone-relational/issues/37复制到这里,这样更多的人就有希望找到它)

我相信您现在已经弄明白了,很抱歉这么晚才回复,但只是为了确保:选项(如collectionTypeincludeInJSON)应用于同一对象中的key

因此,对于您的第一个示例,您可以将关系写为:

代码语言:javascript
复制
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;所以如果不指定它,它将完全序列化relationreverseRelation)。

reverseRelation只是采用相同的选项,仅将它们应用于任何地址上的venue密钥。在本例中,它只序列化它所链接的会场的venue.id属性。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7655409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档