【问题标题】:Backbone Relational: Model with 2 collections of the same typeBackbone Relational:具有 2 个相同类型集合的模型
【发布时间】:2013-04-19 20:04:06
【问题描述】:

我正在尝试创建具有 2 个相同类型的“hasMany”关系的主干关系模型,但出现错误:“无法在“(myReverseRelationName)”上为模型 = 子创建关系 = 子:已经由关系 = 孩子”。这是应该被允许的事情,还是我做错了?谢谢。

我创建了一个 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);

【问题讨论】:

  • 我也有同样的问题

标签: javascript backbone.js backbone-relational


【解决方案1】:

问题是 largeAnimals 和 smallAnimals 都在“Animal”模型类中,但没有对 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 一个不同类型的键来指代动物园。这也意味着当您从服务器获取smallAnimals 时,smallAnimal 对象应该具有指向 Zoo 的属性为residesIn

【讨论】:

    猜你喜欢
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多