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 работают.

Почему у меня такое поведение?
Есть ли пример приложения, использующего несколько маршрутов и requirejs на github?

спасибо.

Вот мой код:


** 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

Проблема, вероятно, вызвано порядком, в котором загружаются маршрутизатор файлы, и маршрутизаторы создаются.

ОбъектBackbone несет ответственность за выполнение маршрутов. Он собирает все маршруты, определенные на всех маршрутизаторах, когда маршрутизаторы создаются. Затем он контролирует URL-адрес браузера для изменений. Когда он увидит изменение, он возьмет первый доступный соответствующий маршрут и запустит один маршрут, пропустив что-нибудь еще.

Когда вы определили маршрут *defaults, все соответствует этому. Поэтому, если этот маршрут загружен первым, больше ничего не пострадает. Таким образом, вам нужно будет быть более явным в параметрах маршрута, чтобы этот один маршрут не ударил все время, или вам нужно будет убедиться, что этот маршрутизатор загружен последним.

+0

Спасибо за ваш ответ. Фактически, если я устанавливаю ''': 'index1'' вместо' '* defaults': 'index1'', он будет работать. Еще раз спасибо. –

+0

@DerickBailey http://stackoverflow.com/questions/20017210/router-js-function-not-executed Можете ли вы мне помочь здесь :) – CodeGuru

+0

@DerickBailey действительно кажется, что на практике противоположность того, что вы описываете, верна: если вы используете какой-то общий маршрут, его нужно загрузить _first_, чтобы другие более конкретные маршруты работали. В идеале поведение должно быть указано так, чтобы мы могли полагаться на него так или иначе. –

Смежные вопросы