我正在尝试使用相同类型的2“hasMany”关系创建骨干关系模型,但我收到错误:“无法创建关系=子项”(myReverseRelationName)“for model = child:already由关系=孩子“。这是应该被允许的东西,还是我做错了?感谢。
我创建了一个jsFiddle,所以你们可以自己看看: http://jsfiddle.net/Mu68f/5/
这是代码:
Animal = Backbone.RelationalModel.extend({
urlRoot: '/animal/',
});
AnimalCollection = Backbone.Collection.extend({
model: Animal
});
Zoo = Backbone.RelationalModel.extend({
relations: [
{
type: Backbone.HasMany,
key: 'largeAnimals',
relatedModel: Animal,
collectionType: AnimalCollection,
reverseRelation: {
key: 'livesIn',
includeInJSON: false
}
},
{
type: Backbone.HasMany,
key: 'smallAnimals',
relatedModel: Animal,
collectionType: AnimalCollection,
reverseRelation: {
key: 'livesIn',
includeInJSON: false
}
},
]
});
// initialize our zoo
var zoo = new Zoo({
largeAnimals: [{name: "Big Bill"}],
smallAnimals: [{name: "Pee Wee"}]
});
console.log(zoo);
答案 0 :(得分:2)
问题是largeAnimals和smallAnimals都在“Animal”模型类中,但是没有对Zoo的不同引用。
就关联而言,如果模型(即动物)以两种不同的方式(小型和大型)属于另一种模型(Zoo),那么它应该具有两种不同类型的“外键”,它们指的是相关模型以两种不同的方式。
就简单性而言,我会选择将“大”或“小”作为属性添加到Animal类,而不是尝试以两种不同的方式将它与Zoo关联。
但是,如果您想将动物与动物园联系起来,请按以下步骤操作:
Animal = Backbone.RelationalModel.extend({
urlRoot: '/animal/',
});
AnimalCollection = Backbone.Collection.extend({
model: Animal
});
Zoo = Backbone.RelationalModel.extend({
relations: [
{
type: Backbone.HasMany,
key: 'largeAnimals',
relatedModel: Animal,
collectionType: AnimalCollection,
reverseRelation: {
key: 'livesIn',
includeInJSON: false
}
},
{
type: Backbone.HasMany,
key: 'smallAnimals',
relatedModel: Animal,
collectionType: AnimalCollection,
reverseRelation: {
key: 'residesIn', // different key to refer to Zoo
includeInJSON: false
}
},
]
});
如您所见,我给了smallAnimal
一个不同类型的密钥来引用动物园。这也意味着当您从服务器获取smallAnimal
时,smallAnimal
个对象应该具有一个指向Zoo的属性residesIn
。