我正在寻找在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'
是否有任何修正(即默认路线没有/结束)?
答案 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的最新版本中得到修复。我在论坛上问了一个问题并找到答案。我在这里添加它作为答案,如果它可以帮助任何寻找相同事物的人。