56

最近在思考 Backbone.js 和 AngularJS 的异同。

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

难道不能在 AngularJS 应用程序中只使用 Backbone-Models 和 Collections 吗?因此,我们将拥有两全其美的 AngularJS 双向数据绑定和通过 Backbone-Models 和 Collections 方便地访问服务器端(或其他存储选项)。

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

有人有使用 AngularJS 的 Backbone-Models 或 Collections 的经验吗?他们不是很好地互补吗?我是不是少了点什么?

4

7 回答 7

11

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

它演示了一种使用 AngularJS 处理 Backbone 模型的方法。但是设置器/获取器连接会更好。

于 2013-08-16T06:53:42.097 回答
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/

于 2014-01-22T22:54:59.570 回答
7

试着看看restangular

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

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

于 2013-10-03T21:45:31.250 回答
7

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

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

carCollection.getTotalCost()

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

carCollectionService.getTotalCost(carCollection)

我喜欢 Backbone 方法,因为在我看来它读起来更干净。但是,获取 2 路数据绑定很棘手。查看这个 JSBin 示例。

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

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

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

于 2013-08-01T00:35:38.840 回答
4

肯定是有效的问题。

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

到目前为止,获取和添加部分完美无缺并节省了代码,但是将这些主干模型(或其中的属性)绑定到 ng-models 上的输入以进行编辑尚未起作用。

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

于 2013-06-24T23:56:41.167 回答
2

您应该在此处查看带有 parse 的 angularJS 样板。Parse 类似于骨干,但不完全是骨干。这就是我开始我对angularJS主干JS项目的想法的地方

于 2014-10-15T21:50:21.320 回答
2

我也想知道-

这是用例:

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

你猜对了,我们想在混合应用程序的其余部分使用 angularjs。

有效的问题。

-Sree

于 2014-03-10T22:01:55.957 回答