2017-02-14 8 views
0

main.jsに変数またはオブジェクトを設定したいのですが、それを任意のバックボーンビューから参照できます。グローバル変数/オブジェクトをRequireJSと共有する方法

私はlocalStorageの使用を検討しましたが、データは動的で少し敏感なので、ユーザーが非常に簡単に操作できるので、localStorageに保存したくありません。

答えて

1

「main.js」と言って以来、あなたはRequireJSとBackbone.jsの間で混乱していると思います。 RequireJSはバックボーンの一部ではありません。バックボーンプロジェクトで多用されるAMDモジュールローダーです。あなたのようRequireJSモジュールを必要とするよう

が見える:

define(function (require) { 
    var someData; 
    var singleton = function() { 
    return { 
     getMyData = function(){}, 
     setMyData = function(data){}, 
    }; 
    }; 
    return singleton(); 
}); 

P.S:上記のコードは、適切なコンストラクタ関数、何のES6クラスのインスタンスをオブジェクトリテラル行うことができます。私は例として何かを投稿しました。

+0

少し混乱しているかもしれません。私はbackbonejsアプリケーションでrequireJSを使用しています。どういうわけかmain.jsに変数やオブジェクトを登録する必要があります。この変数は、別のjsファイル(r.jsより前)であるbackbonejsビューから参照できます。 – David

+0

main.jsでシングルトンモジュールを要求し、それに何らかの値を設定することができます。次に、このモジュールをバックボーンビューのモジュールの依存として追加/追加することによって値を取得できます。他の作品では、あなたのデータをrequirejsモジュールに保存します –

0

@TJ already gave what's needed私のアプリ内でサービスと呼ばれるものを達成するには、AngularJS servicesから借りてください。私はちょうどi18nextインスタンスですi18nのようなカップルのサービスを持っています。

あなたのように、windowオブジェクトに入れずに、どこからでも共有できる、特定のデータをアプリに関連して管理したいと思っていました。

AppStateサービスは、バックボーンモデルのインスタンスに過ぎません。

define(['underscore', 'backbone', 'color'], function(_, Backbone, Color) { 

    var State = Backbone.Model.extend({ 

     setBrandColor: function(hexColor, options) { 
      return this.set({ color: new Color(hexColor) }, options); 
     }, 

     getBrandColor: function() { 
      return this.get('color'); 
     }, 
    }); 

    return new State(); // return a new instance instead of the constructor. 
}); 

バックボーンモデルでは、アプリ内のすべてのものがイベントを聴くことができます。これはReactからインスパイアされています。

this.listenTo(AppState, 'change:color', this.onBrandColorChange); 

私は、彼らがインスタンスしているにもかかわらず、サービスのためにPascalCaseを使用することを好む注意、それらが密接に他の言語での静的タイプに関連しています。

この方法では、アプリのアプリの状態が変化すると、他の部分は、又はそれに応じて反応しないできることがあります。イベントがなければ、アプリケーションは望ましくないほどカップリングする必要があります。

関連する問題