8

私は次のような状況にあります。

モジュールをロードするためにrequireJsを使用していますが、グローバル変数を使用したくありません。

main.jsは、ルーターのロードを担当します。
次に、ルーターがアプリをロードし、アプリがいくつかのサブアプリをロードします。

すべてが初期化された後、subAppsはrouterを作成するために必要router.navigateです。

ここにスキーマがあります:

main.js -> router -> app -> subApp -> router

次に、循環依存の問題が発生します。そのため、subAppのルーターは未定義になります。

コードを再編成したり、この問題を修正したりするための最良の方法は何ですか?これについていくつかの例はありますか?

4

3 に答える 3

5

スキーマ:

 main.js -> router -> app -> subApp -> router

は正しい。

バックボーン.marionetteを使用している場合、を使用せずにアプリとサブアプリからルーターにアクセスするには、次の方法global varでルーターでアプリを起動する必要があります。


// router.js
YourApp.start(router: router);

// app.js
YourApp.addInitializer(function(options){
  // do useful stuff here
  var myView = new MyView({
    router: options.router
  });
  YourApp.mainRegion.show(myView);
});
于 2012-07-03T07:35:50.090 に答える
2

サブアプリは、ルーターに明示的に依存するのではなく、ルーターが処理するイベントを発生させることができます

于 2012-06-29T22:48:31.123 に答える
2

私のプロジェクトでは、次の依存関係を使用しています:main.js-> app->router->subApp。

app.jsで、アプリへのポインターを保持する単一のグローバル変数を作成します。

define([...], function(...) {
return {
  initialize: function() {
    window.MyApp = new Backbone.Marionette.Application();
    // ...
    MyApp.start();
  }
};
});

これにより、どこからでもアプリのリージョンにアクセスしやすくなり、グローバルな状態情報を1つの名前空間に保存できます。

最初はグローバルアプリなしでやってみましたが、やがてあきらめて、このアプローチの方がはるかに柔軟であることがわかりました。

于 2012-06-30T20:59:29.003 に答える