在骨干协会上实现多对多关系的可扩展方法?

时间:2014-02-02 16:57:37

标签: backbone.js

对于基于Backbone-Associations的多对多关系,是否有经过测试和扩展的方法?我一直在寻找Backbone-Relational和Backbone-JJRelational作为替代品,但由于其他原因和限制,我希望保留Backbone-Associations。

我有两个模型(项目和位置)和各自的集合,每个模型与另一个模型有很多关系。一个项目可以有多个位置,一个位置可以托管多个项目。

// Non-relevant statements have been left out 

var Project = Backbone.AssociatedModel.extend({
    relations: [{
        type: Backbone.Many,
        key: 'locations',
        collectionType: Locations
    }],
    defaults: 


});

var Projects = Backbone.Collection.extend({
    model: Project
});

var Location = Backbone.AssociatedModel.extend({
    relations: [{
        type: Backbone.Many,
        key: 'projects',
        collectionType: Projects
    }]
});

var Locations = Backbone.Collection.extend({
    model: Location
});

如果不是仅仅指出如何以最可扩展和最健壮的方式解决问题,那么更愿意投入生产。 (REST API在NodeJS / Express和MongoDB上实现,如果有影响的话)

Cheeers

1 个答案:

答案 0 :(得分:0)

为了它的价值,我决定用平面嵌套结构实现关系,并在模型中使用关系来保持数组的引用。我相信Backbone-Associations和Backbone-Relational非常适合一对一和一对多关系,但对于更复杂的嵌套结构,实现“自制”关系结构似乎更有效。

实现映射到我的实体模型的特定约束的可重用结构的灵活性以及对事件处理的更多控制使我得出了这个结论。我有大约25个模型和30个集合,并且在这里有很多多对多的关系。

(需要说的是我对JavaScript和Backbone相当新,所以这可能对决定产生影响)