避免在Backbone.js中为默认路由尾部斜杠

时间:2013-10-24 05:49:02

标签: backbone.js routes trailing-slash

我正在寻找在Backbone中完成的事情。这是解释。

我有像

这样的骨干路线
{
    '': 'defaultRoute',
    'test': 'test',
    'testing': 'testing'
}

假设我的根网址为“ / routes

现在当我说' router.navigate('test',{trigger:true}); 'url更改为 / routes / test

当我调用' router.navigate('testing',{trigger:true}); 'url更改为 / routes / testing 时,类似的方式。

但是当我打电话给' router.navigate('',{trigger:true}); '网址更改为 / routes /

你知道我没想到/最后。我从未通过。它本应该回到根URL,即“ / routes ”。

添加/最后会产生很多差异/意义。结帐'http://googlewebmastercentral.blogspot.in/2010/04/to-slash-or-not-to-slash.html'

是否有任何修正(即默认路线没有/结束)?

3 个答案:

答案 0 :(得分:0)

尝试覆盖Backbone.History.prototype.navigate

复制默认功能并更改此行:

  var url = this.root + fragment;

到:

  if(this.root !== '/' && fragment === ''){
    var url = this.root.replace(trailingSlash, '');
  }else{
    var url = this.root + fragment;
  }

答案 1 :(得分:0)

首先要做的事情:

  

如果您的申请未通过您的根网址提供   域名,请务必告诉历史根目录的真实位置   选项:Backbone.history.start({pushState:true,root:   “/公共/搜索/”})   Backbone#History

在您的情况下,它最有可能是root: "/routes"。您需要记住的一点是,您的网站在浏览器中被视为资源或远程文件夹,因此没有尾部斜杠的默认路由可能无法通过将其保留为“”来完全起作用,因为这通常意味着“当前文件夹“。您可以尝试将根网址设置为root: "/"(就像默认情况下一样)并创建“路由”资源作为默认路由,如下所示:

{
    'test':    'test',
    'testing': 'testing',
    'routes':  'defaultRoute',
    '*':       'catchAll'
}

我正在对你做的另一个建议(正如你在上面看到的那样)是在最后设置一个catch all all URL,以防有人输入不存在的URL,你也可以使用它来重定向你的用户到您的默认路线。

// your code above ...
defaultRoute: function() {
  // your default route code...
},

catchAll: function() {
  this.navigate('routes', {trigger: true});
}
// your code below ...

最后,出于任何原因手动搞乱Backbone网址,你很有可能破坏整个事情。如果将来API更改它会更容易更新如果你只是按照预期用途。

答案 2 :(得分:0)

更新: -

这已经在Backbone的最新版本中得到修复。我在论坛上问了一个问题并找到答案。我在这里添加它作为答案,如果它可以帮助任何寻找相同事物的人。

https://github.com/jashkenas/backbone/issues/2871