骨干关联与骨干关系

时间:2014-08-12 05:49:48

标签: javascript jquery backbone.js backbone-relational backbone-associations

我一直在寻找有关如何在Backbone中建立关系的信息,并且遇到了以下两个不错的插件:

两者似乎都存在了两年多,似乎很稳定。但是,Backbone-relational在以下条款中优于Backbone-associations

  • 提供几乎所有关系,例如我们在数据库中的one-to-one, one-to-many, many-to-one
  • 乍一看好的文档(类似于Backbone.js

因为,我还没有时间广泛浏览这两个插件,我想知道有经验的人跟踪事情:

  • 两者都支持AMD(如Requirejs)吗?
  • 与Ruby on Rails等后端服务器一起使用插件有多容易?
  • 实现多态关系有多容易?

3 个答案:

答案 0 :(得分:2)

最大的区别是Backbone-relational fobids创建具有相同ID的相同模型的多个实例。考虑:

let Person = Backbone.RelationalModel.extend({
    relations: [
        type: Backbone.HasMany,
        key: 'likes_movies',
        relatedModel: 'Movie'
    ]
});

let peter = new Person({
    likes_movies: [{id: 1, title: 'Fargo'}, {id: 2, title: 'Adams Family'}]
);

let john = new Person({
    likes_movies: [{id: 1, title: 'Fargo'}, {id: 2, title: 'Adams Family'}]
);

// Change title of one of Peter's movies
peter.get('likes_movies').get(1).set('title', 'Fargo 2 (Sequel)');

// John's corresponding movie will have changed its name
console.log(john.get('likes_movies').get(1)); // Fargo 2 (Sequel)

如果重写Backbone-associations,John的电影标题就不会改变。这可以被视为一个特征或缺点,取决于你如何看待它。

除此之外,两个库都非常相似,只是Backbone-associations的开发似乎已经在一年前停止了。

答案 1 :(得分:1)

实际上,基于GitHub脉冲(活动指标),Backbone-relational社区似乎更加活跃。

答案 2 :(得分:0)

当我在寻找像EmberData或Restangular for Backbone这样的东西时,我研究了这两个库。

这两个库都试图弥补主要的Backbone弱点:正确处理Rest API Restful Resources。
事实上,Backbone每次需要渲染时都会促进新模型的创建(而不是重复使用在应用程序中其他地方进行其他渲染的实例)。
然后会出现一些不一致的原因,因为某些模型更新不会在Web应用程序的任何位置传播 然后需要骨干模型实例的缓存。 Backbone Relational提供了这样的缓存,但Backbone Association没有。

此外,两者都重新实现了Backbone的代码方法(set,get,reset,trigger),因此它们与Backbone紧密耦合。
这可能会使Backbone库迁移变得复杂,特别是如果你在Backbone(Marionnette,Thorax,Chaplin,...)上使用另一个MVC框架

Backbone Association在代码行方面比Backbone Relational更轻(800 vs 2000)。

  • Backbone Association实现更容易调试,因为它直接管理重载方法的关系(set,get,...)
  • 相反,Backbone Relational依赖队列来将关系内容与其内部存储同步。这使调试变得棘手......

另一个轻量级(但使用较少)替代方案是“Backbone SuperModel”:http://pathable.github.io/supermodel/

  • 这个库比800行代码更容易理解,比Backbone Relational(我能够自己修复一个小错误。)
  • 它提供基于Backbone Collection的骨干实例缓存

在我这边,

  • 我成功地将最后一个与RequireJs
  • 集成在一起
  • 我管理一些多态关联
  • 我的网络应用程序和我的Java后端之间的协议出现了
  • 我每次需要时都成功升级了Backbone和Marionette