Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 多个主干路由器和默认路由——匹配路由/加载路由器的顺序_Javascript_Backbone.js_Url Routing_Marionette - Fatal编程技术网

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