Javascript 多个主干路由器和默认路由——匹配路由/加载路由器的顺序
我正在编写的应用程序越来越大,到目前为止,我只使用了一个路由器。首先,我想把它分成两个独立的路由器,当然更多的是这样:Javascript 多个主干路由器和默认路由——匹配路由/加载路由器的顺序,javascript,backbone.js,url-routing,marionette,Javascript,Backbone.js,Url Routing,Marionette,我正在编写的应用程序越来越大,到目前为止,我只使用了一个路由器。首先,我想把它分成两个独立的路由器,当然更多的是这样: class window.UFO.Routers.App extends Backbone.Router routes: #root '' : 'root' #not found '*notFound' : 'notFound' class window.UFO.
class window.UFO.Routers.App extends Backbone.Router
routes:
#root
'' : 'root'
#not found
'*notFound' : 'notFound'
class window.UFO.Routers.Companies extends Backbone.Router
routes:
'companies/new/:angellist' : 'companiesNew'
'companies/new' : 'companiesNew'
'companies/:id/edit' : 'companiesEdit'
'companies/:id/edit/people': 'companiesPeople'
'companies/:id/edit/people/:preselect': 'companiesPeople'
但有一个问题:每次我尝试访问某个公司的路由时,都会触发notFound路由。我猜这是因为AppRouter首先被加载并初始化,所以我使用的是rails资产管道
你知道这个问题的解决方法吗?也许是一种强制主干在匹配到*notFound路由之前检查所有可用路由器的方法
顺便说一句,我们使用的是主干网。木偶网,因此解决方案可能会使用其中的工具和代码。Vlad Niktin的评论将我引向了正确的方向。然而,实际的url匹配顺序与路由器初始化顺序相反。所以,要确保“*notFound”路由最后匹配,您必须首先加载App router 我的代码,使用木偶初始化器:
window.APP.addInitializer ->
appRouter = new window.APP.Routers.App
companiesRouter = new window.APP.Routers.Companies
sessionsRouter = new window.APP.Routers.Sessions
roundsRouter = new window.APP.Routers.Rounds
我仍然不确定这是否是最佳解决方案,因为您必须始终记住为每个新路由器的初始值设定项添加另一行。我喜欢在与我的控制器相同的文件中声明路由,并且我不希望必须显式地对我的控制器文件进行排序 因此,这里有另一种方法来确保路线是按特定性排序的: 基本上,它将路由存储在一个数组中,然后用*对它们进行排序,后跟:后跟users/new之类的显式路由。如果一个路由有两个:字符,它将被包含在只有一个字符的路由之前。正如我从源代码中看到的,路由是按初始化顺序检查的,所以请尝试最后加载并初始化App router