2016-12-19 6 views
0

У меня два ресурса: Routers: Students и Colleges.Как инициализировать несколько маршрутизаторов?

class App.Routers.Colleges extends Backbone.Router 
    routes: 
    "index": 'index' 
class App.Routers.Students extends Backbone.Router 
    routes: 
    'index': 'index' 
    'new': 'newStudent' 

Как инициализировать эти два маршрута таким образом, чтобы они работали?

Я попытался инициализировать, как приведенный ниже код, но он не работает.

window.App = 
Models: {} 
Collections: {} 
Views: {} 
Routers: {} 
initialize: -> 
    new App.Routers.Students 
    new App.Routers.Colleges 
    Backbone.history.start() 
$(document).ready -> 
    App.initialize() 

Когда я пытаюсь запустить код выше, это только показывает мне данные в new App.Routers.Colleges в обоих колледжей и студентов дел.

ответ

1

Маршруты в маршрутизаторах добавляются к глобальному объекту Backbone.history. Таким образом, любой идентичный маршрут переопределяет прецедентные. Даже неидентичные маршруты могут переопределять аналогичный, но более конкретный маршрут, если они определены после.

При создании нового маршрутизатора его конструктор вызывает _bindRoutes, который анализирует маршруты от последнего до первого, поэтому определенные маршруты должны быть определены первыми, а более общие маршруты - после, заканчивая любым маршрутом.

Каждый URL должен быть уникальным, чтобы вы могли пространства имен каждый маршрутизатор с префиксом:

class App.Routers.Colleges extends Backbone.Router 
    routes: 
    'colleges': 'index' 
class App.Routers.Students extends Backbone.Router 
    routes: 
    'students/new': 'newStudent' 
    'students': 'index' 

Или вы могли бы использовать (или создать свой собственный) суб-маршрутизатор/контроллер.

  • Backbone.subroute (больше не поддерживается)
  • Backbone.controller (не выглядит, как он обрабатывает подобные маршруты, но это может помочь)