Answer for # 1:
All routes are registered in Backbone.history.handlers .
Answer to # 2:
You can add a handler to each link on your site:
var application = new Backbone.Marionette.Application(); application.addInitializer(function(options) { // Add class to target a browser, not as standalone app. if(window.navigator.standalone != true) { $('body').addClass('no-standalone'); } // Prevent internal links from causing a page refresh. $(document).on('click', 'a', function(event) { var fragment = Backbone.history.getFragment($(this).attr('href')); var matched = _.any(Backbone.history.handlers, function(handler) { return handler.route.test(fragment); }); if (matched) { event.preventDefault(); Backbone.history.navigate(fragment, { trigger: true }); } }); });
Of course, make sure you use pushState:
if (!Backbone.history.started) { Backbone.history.start({ pushState: true }); }
This last snippet should be run after all of your routers have initialized.
Answer to # 3:
This might work a little to separate the routes:
define([ 'backbone', 'underscore', 'routers/dashboard', 'routers/anotherroute1', 'routers/anotherroute2' ], function(Backbone, _, DashboardRouter, AnotherRoute1, AnotherRoute2) { 'use strict'; var application = new Backbone.Marionette.Application(); application.addInitializer(function () { _.each([DashboardRouter, AnotherRoute1, AnotherRoute2], function(router) { new router(); }); if (!Backbone.history.started) { Backbone.history.start({ pushState: true }); } }); return application; });
source share