我应该将href属性更改为相对属性还是应该使用前导斜杠定义路由? (为什么Backbone文档建议没有前导斜杠?)
Backbone文档明确建议以下内容:
请注意,您要避免在路线定义中使用前导斜杠 ...
现在,我为测试定义了这些路线:
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
则没有。 (将前导/
添加到索引路由会修复此问题。)
我传递的href="…"
字符串都是从域根(href="/index/"
& href="/clients/"
)开始的。
答案 0 :(得分:3)
骨干文档建议避免使用前导斜杠,因为如果使用pushState: true
,它们会中断。
例如:
routes: {
"/clients/": "logMe"
}
提供的散列网址为http://example.com/#/clients/
,但推送状态网址为http://example.com//clients/
,显然会失败。
使用类似!/
之类的前缀将起作用:
routes: {
"!/clients/": "logMe"
}
分别提供http://example.com/#!/clients/
和http://example.com/!/clients/
。
另请注意,前导斜杠不适用于router.navigate
。系统会自动删除router.navigate('/clients/')
,从而生成#clients/
的网址,而不是#/clients/
。
答案 1 :(得分:1)
传入的“href”值匹配到路径属性名称。如果您的“href”值以斜杠开头,那么您的路径属性也必须如此。
请注意,在Backbone文档中的所有示例中,片段值不以斜杠开头。