问:
我应该将我的 href 属性更改为相对属性还是应该使用前导斜线定义路由?
(为什么 Backbone 文档建议不要使用前导斜线?)
背景:
Backbone 文档清楚地建议以下内容:
Note that you'll want to avoid using a leading slash in your route definitions…
现在,我为测试定义了这些路由:
var Router = Backbone.Router.extend({
routes: {
"index/": "logMe",
"/clients/": "logMe"
},
logMe: function (page) {
console.log(page);
}
});
调用 router.navigate($(this).attr('href'), {trigger: true});
在 click
上,路由被捕获为/clients/
但不适用于 index
。 (将前导 /
添加到 index 路由可以修复此问题)。
我传递的 href="…"
字符串都是从域根开始的 (href="/index/"
& href="/clients/"
).
最佳答案
主干文档建议避免使用前导斜杠,因为如果您使用 pushState: true
,它们会中断。
例如:
routes: {
"/clients/": "logMe"
}
给出 http://example.com/#/clients/
的哈希 URL,但是 http://example.com//clients/
的 pushState URL >,这显然会失败。
使用类似 !/
的前缀将起作用:
routes: {
"!/clients/": "logMe"
}
这将分别给出 http://example.com/#!/clients/
和 http://example.com/!/clients/
。
另请注意,前导斜线不适用于 router.navigate
。 router.navigate('/clients/')
被自动剥离,导致 URL 为 #clients/
,而不是 #/clients/
。
关于javascript - 尽管文档建议相反,但主干路由中缺少前导斜杠仍无法交付,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9367559/