1

こんにちは、バックボーン コレクションとサブビューに設計上の問題があります。

私の問題は、3 レベル上の親ビューから渡す画像コレクションを必要とする 3 レベル下のサブビューがあることです。親ビューに由来する依存関係のチェーンが作成されるため、これは好きではありません。

現在、私の画像コレクションには、URL /business/the-biz-id/images を生成するための business_id が必要です。レンダリングされたサブビューでグローバルに使用できる business_id がないため、コレクションをサブビューに渡します。

サブビューが business_id を渡されなくてもコレクションをインスタンス化できるように、business_id をグローバルに使用できるようにする必要がありますか? グローバル変数の宣言を忘れると、将来問題が発生する可能性があるため、これを行う必要があるかどうかはわかりません。しかし、それが利用可能であれば、画像コレクションを複数のビューに渡すことを避けることができます。

グローバル宣言を行わずに、サブビューで business_id を使用できるようにするにはどうすればよいですか? 提案?意見?

2013 年 10 月 27 日更新:

これは私が最終的に使用したものです:

App.BusinessHelper = function (bizId) {
  var bizId = bizId;
  var obj = {};

  obj.getBizId = function () {
     return bizId;
  }

  App.BusinessHelper = obj;
}

bizId は簡単に変更したり変更したりできないため、この構造が気に入っています。そうは言っても、私はこのオブジェクトに大きく依存していましたが、私の状況ではその利便性のためにそれだけの価値がありました。

4

2 に答える 2

2

business_id をグローバルにしたくない場合 (これは間違いなく良い考えです)、作成時にインスタンス化するビューにそれを提供することでこれを回避できます。

var myView = new MyView({business_id: 10});

myViewサブビューの作成を担当している場合は、それが道です。コンストラクターに渡すデータは、コード アーキテクチャが正しければ、常にコンテキストを提供します。同じタイプのビューに一般的なものはすべて、「クラス」宣言で定義されます。コンテキストに依存するものはすべて、コンストラクターのパラメーターとして提供されます。ここで、business_id は明らかにコンテキストの一部です。

おそらくご存じのとおりbusiness_id、 の属性としてビューで使用できるようになりますoptions

var MyView = Backbone.View.extend({
    initialize: function() {
        this.subView = new SubView({
            business_id: this.options.business_id, 
            foo: 'bar'
        });
    }
});
于 2013-10-10T09:39:39.630 に答える
1

通常、このようなグローバル オブジェクトを宣言します。

var App = {};

そして、グローバルにアクセスする必要があるものを添付します。たとえば、あなたの場合、business_id以下のように添付して、必要な場所にアクセスします。これらの状況を避けることはできません。

App.business_id = 15;
于 2013-10-10T09:23:57.713 に答える