7

いくつかのアプリでアプリを分割しました。バックボーンとrequirejsを使用して複数のルーティングを定義/使用する方法

main.js 
app.js 
app1/ 
    |- routing 
    |- controller 
    |- app 
app2/ 
    |- routing 
    |- controller 
    |- app 

1)app1でルータを使用しようとすると、それらが動作します。
2)app2でルータを使用しようとすると、動作しません。
3)'js/app1/routing',の行にmain.jsという文字列を入力した場合は、app2のルータが動作します。

この現象はなぜ発生しますか?
githubに複数のルーティングとrequirejsを使用するアプリの例はありますか?

ありがとうございました。ここで

は私のコードです:


** main.js **

define([ 
    'js/app', 
    'js/app1/routing', // the routers in this app work 
    'js/app2/routing' // the routers in this app do not work but 
         // if I comment the previous line (js/app1/routing',) 
         // they works 
], 
function (App) 
{ 
    "use strict"; 
    App.initialize(); 
}); 

** app.js **

define([], 
function() 
{ 
    "use strict"; 
    var app = new Backbone.Marionette.Application(); 

    return app; 
}); 

* * a PP1/rotuing **

define(['backbone','app1/controller'], function(Backbone, controller) 
{ 
    "use strict"; 
    var Router = Backbone.Marionette.AppRouter.extend({ 

     appRoutes: { 
      '*defaults': 'index1' 
     } 

    }); 
    return new Router({ 
     controller: controller 
    }); 

}); 

** APP2/routing.js **

define(['backbone','app2/controller'], function(Backbone, controller) 
{ 
    "use strict"; 
    var Router = Backbone.Marionette.AppRouter.extend({ 

     appRoutes: { 
      'app2': 'index2' 
     } 

    }); 
    return new Router({ 
     controller: controller 
    }); 

}); 

答えて

5

問題はおそらくルーターファイルがロードされる順序、およびルータによって引き起こされます作成されます。

バックボーンのhistoryオブジェクトがルートの実行を担当します。ルータがインスタンス化されると、すべてのルータで定義されたすべてのルートを収集します。次に、ブラウザーの変更のURLをモニターします。それが変化を見ると、それは最初に利用可能なマッチングルートをとり、その1つのルートを発射し、他のものをスキップします。

*defaultsルートが定義されていると、すべてが一致します。したがって、このルートが最初にロードされた場合、他には何もヒットしません。したがって、この1つのルートが常にヒットしないように、またはこのルーターが最後にロードされていることを確認する必要があるように、ルートパラメーターを明示的に指定する必要があります。

+0

あなたの答えに感謝します。実際、 ''* defaults':index1''の代わりに' '':' index1''を設定すると、それはうまくいきます。再度、感謝します。 –

+0

@DerickBailey http://stackoverflow.com/questions/20017210/router-js-function-not-executedここで私を助けることができますか? – CodeGuru

+0

@DerickBailey実際には、実際にあなたが記述したものの反対が真実であるようです:ある種のキャッチオールルートを使用している場合は、他のより具体的なルートが機能するためには最初にロードする必要があります。理想的には、そのような振る舞いは、一方的に、あるいは他方に頼ることができるように指定されます。 –

関連する問題