【问题标题】:Backbone.js router - route with splat also calls route with no splatBackbone.js 路由器 - 带有 splat 的路由也调用没有 splat 的路由
【发布时间】:2012-07-03 08:14:21
【问题描述】:

我有一个设置了一些路由的主干.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 等于 'undefined',然后第二次 splat 等于 'more'。

如果我注释掉路由 'a-route' : 'goToRoute',那么一切都可以正常使用 router.navigate('a-route/more') ......但我需要两条路线 - 有和没有啪啪啪。

根据文档,我认为我的设置正确,有什么想法吗?

【问题讨论】:

  • 你已经拥有的有什么问题?只需从splat === undefined 重定向到您想从那里去的任何地方。
  • 有不同的布局取决于是否有 splat === 'more' 或 splat === 'undefined'。目前,调用 router.navigate('a-route/more', {trigger:true}) 正在触发两个路由,因此它在同一页面上呈现两个布局
  • 我的意思是,删除a-route: goToRoute 并在goToRoute 中执行if (splat === undefined) {justARoute(); } else { splatRoute(splat); }
  • 如果我这样做,对 router.navigate('a-route') 的调用不会找到匹配项 - 页面不会呈现
  • 我可能有错误的设置,但对我有用 jsfiddle.net/7u2Bg/1 有或没有 pushstate

标签: backbone.js backbone-routing


【解决方案1】:

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

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

【讨论】:

  • 我可能是错的,但如果反斜杠后面只有一个项目,我认为参数和 splat 之间没有区别。我认为 splat 只是让您将反斜杠后面的所有内容放入一个变量中,而每个参数代表一个组件。
  • 如果您按照我粘贴的方式尝试,它只会输入一次。 splat 的问题在于它是某种通配符,因此您的路由器有两个有效条目。
  • 另一种可能是你调用了 router.navigate('a-route', {trigger : true});在 'a-route/*splat' 上调用的函数内部
猜你喜欢
  • 1970-01-01
  • 2012-04-18
  • 2012-02-19
  • 2012-02-15
  • 1970-01-01
  • 2013-08-16
  • 2019-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多