2016-12-19 4 views
0

Ich habe zwei Ressourcen in Routers: Students und Colleges.Wie initialisiert man mehrere Router?

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

Wie initialisiert man diese beiden Routen so, dass sie funktionieren?

Ich habe versucht, wie der Code unten zu initialisieren, aber es funktioniert nicht.

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

Wenn ich versuche, den obigen Code ausführen können, es zeigt mir nur die Daten in new App.Routers.Colleges beiden in Hochschulen und Studenten div.

Antwort

1

Routen in Routern werden dem globalen Objekt Backbone.history hinzugefügt. Eine identische Route überschreibt also die vorherigen. Selbst nicht identische Routen können eine ähnliche, aber spezifischere Route überschreiben, wenn sie später definiert werden.

Bei der Instanziierung eines neuen Routers ruft der Konstruktor _bindRoutes auf, der Routen vom letzten zum ersten analysiert, so dass bestimmte Routen zuerst definiert werden sollten und die allgemeineren Routen danach mit einer Catch-All-Route enden.

Jede URL muss eindeutig sein, so können Sie jeden Router mit einem Präfixnamensraum:

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

Oder Sie könnten nutzen (oder ein eigenes) Unter Router/Controller.