我花了一段时间来理解documentation for Backbone-Relational;还不是100%清楚应该添加像includeInJSON这样的东西。也许最好通过说明我试图创建的结构来描述我的困惑。我有一个包含零个或多个嵌套Address模型的Venue模型(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属性中的数组-例如,正如我所希望的那样。对,是这样?
出于同样的原因,我正在尝试理解与连接样式关系相关的相同概念。假设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编写我自己的关系胶水之后,我非常期待使用这个库:-)
发布于 2011-11-02 18:24:26
(将我的答案从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属性。
https://stackoverflow.com/questions/7655409
复制相似问题