56

最近、Backbone.js と AngularJS の相違点と類似点について考えていました。

Backbone で本当に便利だと思うのは、Backbone-Models と Backbone-Collections です。urlRoot を設定するだけで、Ajax を介したバックエンド サーバーとの通信が基本的に機能します。

AngularJS アプリケーションで Backbone-Models と Collections だけを使用することは可能ではないでしょうか? したがって、AngularJS を使用した双方向のデータ バインディングと、Backbone-Model および Collections を介したサーバー側 (またはその他のストレージ オプション) への便利なアクセスの両方の長所を活用できます。

簡単なインターネット検索では、この使用シナリオを示唆するサイトは見つかりませんでした。すべてのリソースは、いずれかのフレームワークの使用について説明しています。

AngularJS で Backbone-Models または Collections を使用した経験がある人はいますか? それらはお互いをうまく補完しませんか?私は何かが足りないのですか?

4

7 に答える 7

11

上記の例の有効なバインディング... http://jsbin.com/ivumuz/2/edit

AngularJS を使用してバックボーン モデルを操作する方法を示します。しかし、セッター/ゲッター接続の方が良いでしょう。

于 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 を使用してサーバーからデータをプルすることはできますが、モデルまたはコレクションにカスタム メソッド/プロパティを追加する場合はどうすればよいでしょうか。たとえば、車のコレクションがあり、総コストを計算したいとします。このようなもの:

バックボーン コレクションを使用すると、これは非常に簡単に実装できます。

carCollection.getTotalCost()

しかし Angular では、次のように、おそらくカスタム メソッドをサービスでラップし、コレクションをそれに渡す必要があります。

carCollectionService.getTotalCost(carCollection)

私の意見では、読みやすいので、バックボーンアプローチが好きです。ただし、双方向のデータバインディングを取得するのは難しいです。この JSBin の例を確認してください。

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

数値を編集すると、car.cost プロパティが model.set() によって設定されないため、collection.totalCost は更新されません。

代わりに、基本的にモデルとコレクションに独自のコンストラクター/「クラス」を使用し、Backbone.Model と Backbone.Collection から Backbone の API のサブセットをコピーし、Angular のデータ バインディングで動作するようにカスタム コンストラクター/クラスを変更しました。

于 2013-08-01T00:35:38.840 に答える
4

確かに有効な質問。

$resource の現在の実装には多くの制限があります。とりわけ、Backbone.Collection のような内部コレクション管理がありません。独自のコレクション/リソース管理レイヤーを角度で ($resource ではなく $http を使用して) 記述したので、バックボーン コレクションとモデルのボイラープレート内部の多くを置き換えることができるかどうかを確認しています。

これまでのところ、フェッチと追加の部分は完璧で、コードを節約できますが、これらのバックボーン モデル (またはその中の属性) を編集用の入力の ng-models にバインドすることはまだ機能していません。

@ericclemmons (github) は同じことを行い、2 つをうまく結婚させました。彼に尋ねて、テストを機能させ、結論を投稿します...

于 2013-06-24T23:56:41.167 に答える
2

ここで parse を使用して angularJS ボイラープレートを確認する必要があります。パースはバックボーンに似ていますが、厳密にはバックボーンではありません。それが、angularJS backboneJS プロジェクトのアイデアを開始する場所です

于 2014-10-15T21:50:21.320 に答える