我将我的应用分成几个应用程序.
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; });
** app1 / 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'],controller) { "use strict"; var Router = Backbone.Marionette.AppRouter.extend({ appRoutes: { 'app2': 'index2' } }); return new Router({ controller: controller }); });
解决方法
问题可能是由加载路由器文件的顺序以及路由器的创建引起的.
Backbone的历史对象负责执行路由.它会在路由器实例化时收集所有路由器上定义的所有路由.然后它监视浏览器的URL以进行更改.当它看到变化时,它将采用第一个可用的匹配路线并触发一条路线,跳过其他任何路线.
当您定义了* defaults路由时,一切都与此匹配.因此,如果首先加载此路由,则不会发生任何其他路由.因此,您需要在路由参数中更明确,以便这一条路线不会一直打到,或者您需要确保最后加载此路由器.