Backbone.js路由器-带splat的路由也会调用不带splat的路由

Backbone.js路由器-带splat的路由也会调用不带splat的路由,backbone.js,backbone-routing,Backbone.js,Backbone Routing,我有一个backbone.js路由器,设置了一些路由,如下所示: routes : { 'a-route' : 'goToRoute', 'a-route/*splat' : 'goToRoute' } goToRoute : function(splat){ if(!splat) { // do this } else { // do that with splat } 当我做一个 router.navigate('a-route', {trigger : true});

我有一个backbone.js路由器,设置了一些路由,如下所示:

routes : {
  'a-route' : 'goToRoute',
  'a-route/*splat' : 'goToRoute'
}

goToRoute : function(splat){
if(!splat) {
  // do this
} else {
  // do that with splat
}
当我做一个

router.navigate('a-route', {trigger : true});
一切正常。但当我这么做的时候

router.navigate('a-route/more', {trigger : true});
路由器触发两次:第一次splat等于“未定义”,第二次splat等于“更多”

如果我注释掉路由“a-route”:“goToRoute”,那么路由器的一切都会正常工作。导航('a-route/more')。。。但我需要两条路线——有和没有splat


根据文档,我认为我已经正确地设置了,有什么想法吗?

您不需要使用*,您必须使用:在您的情况下

routes : {
  'a-route' : 'goToRoute',
  'a-route/:splat' : 'goToRoute'
}

你已经拥有的有什么问题吗?只需从
splat===undefined
重定向到您想从那里走到的任何地方。根据splat===“more”还是splat==“undefined”,布局会有所不同。目前,调用router.navigate('a-route/more',{trigger:true})会触发两个路由,因此它会在同一页面上呈现两个布局。我的意思是,删除
a-route:goToRoute
,并在
goToRoute
do
if(splat==undefined){justARoute();}否则{splat鲁特(splat);}
如果我这样做,调用router.navigate('a-route')未找到匹配项-页面未呈现。我可能设置错误,但在使用或不使用PushState的情况下对我有效。我可能是错的,但如果反斜杠后只有一项,我认为参数和splat之间没有区别。我认为splat只允许您将反斜杠后面的所有内容放入单个变量中,而每个参数表示一个组件。如果您尝试使用我粘贴您的方式,它将只输入一次。splat的问题是,它是某种通配符,因此您的路由器有两个有效条目。另一种可能是您调用了router.navigate('a-route',{trigger:true});在“a-route/*splat”上调用的函数内部