使用AngularJS的Backbone模型

时间:2013-06-03 11:32:07

标签: backbone.js angularjs

最近我在考虑Backbone.js和AngularJS之间的差异和相似之处。

我在Backbone中发现非常方便的是Backbone-Models和Backbone-Collections。你只需要设置urlRoot,然后通过Ajax与后端服务器的通信基本上可以工作。

是否应该只使用AngularJS应用程序中的Backbone-Models和Collections? 因此,我们将充分利用AngularJS进行双向数据绑定,并通过Backbone-Models和Collections方便地访问服务器端(或其他存储选项)。

快速的互联网搜索没有出现任何提示此使用场景的网站。 所有资源都要么谈论使用一个或另一个框架。

是否有人使用AngularJS使用Backbone-Models或Collections。 他们不会很好地相互补充吗?我缺少什么吗?

7 个答案:

答案 0 :(得分:11)

例如上面的工作绑定...... http://jsbin.com/ivumuz/2/edit

它展示了使用AngularJS解决Backbone模型的方法。 但是setter / getters连接会更好。

答案 1 :(得分:9)

有一个类似的想法,想出了这个想法: 只为模型属性添加一个getter和setter。

Backbone.ngModel = Backbone.Model.extend({
        initialize: function (opt) {
         _.each(opt, function (value, key) {
             Object.defineProperty(this, key, {
                 get: function () {
                     return this.get(key)
                  },
                 set: function (value) {
                     this.set(key, value);
                 },
                 enumerable: true,
                 configurable: true
             });
         }, this);
     }
 });

请参阅小提琴:http://jsfiddle.net/HszLj/

答案 2 :(得分:7)

我想知道是否还有人这样做过。在我最近的/第一个有角度的应用程序中,我发现Angular在模型和集合中非常缺乏(除非我当然缺少一些东西!)。当然,您可以使用$ http或$ resource从服务器提取数据,但是如果要向模型或集合添加自定义方法/属性,该怎么办?例如,假设您有一系列汽车,并且您想要计算总成本。像这样:

使用Backbone Collection,这很容易实现:

carCollection.getTotalCost()

但在Angular中,您可能需要将自定义方法包装在服务中并将集合传递给它,如下所示:

carCollectionService.getTotalCost(carCollection)

我喜欢Backbone方法,因为在我看来它更清晰。获得双向数据绑定虽然很棘手。看看这个JSBin示例。

http://jsbin.com/ovowav/1/edit

编辑数字时,collection.totalCost不会更新,因为car.cost属性未通过model.set()设置。

相反,我基本上使用自己的构造函数/“类”用于模型和集合,从Backbone.Model和Backbone.Collection复制Backbone API的子集,并修改我的自定义构造函数/类,以便它可以使用Angular的数据结合。

答案 3 :(得分:7)

尝试查看restangular

我没有在任何地方实现它,但几天前我看到了它的谈话。它似乎以有角度的方式解决了同样的问题。

视频:http://www.youtube.com/watch?v=eGrpnt2VQ3s

答案 4 :(得分:4)

确实有效的问题。

当前实现$ resource的许多限制,其中没有像Backbone.Collection这样的内部集合管理。在使用angular(使用$ http,而不是$ resource)编写我自己的集合/资源管理层之后,我现在看到我是否可以替换主干集合和模型的大部分样板内部。

到目前为止,获取和添加部分是完美无缺的并且可以保存代码,但是将这些主干模型(或者内部的属性)绑定到输入上的ng模型以进行编辑仍然无法正常工作。

@ericclemmons(github)也做了同样的事情并让两人结婚 - 我会问他,让我的测试工作,然后发表结论......

答案 5 :(得分:2)

我想知道同样的事情 -

这是用例:

salesforce mobile sdk(hybrid)有一项名为smartstore / smartsync的功能,它需要主干模型/集合,它将保存到本地存储以供离线访问。

你猜对了,我们希望将angularjs用于混合应用程序的其余部分。

有效问题。

-Sree

答案 6 :(得分:2)

您应该使用解析here查看angularJS样板文件。 Parse是主干,但不完全是主干。多数民众赞成我开始我的angularJS backboneJS项目的想法