我正在使用Backbone.js's routing。 它会为这样的浏览器生成网址:
http://my-app.com/help
对于Internet Explorers(IE10除外)和旧的非HTML5浏览器:
http://my-app.com/#help
如何配置Backbone.js以生成带有其他斜杠的后备网址,如下所示?:
http://my-app.com/#/help
答案 0 :(得分:6)
我知道这有点旧,但由于接受的答案在较新版本的Backbone中不再适用,我想我会分享我的发现。
我找到了一种方法可以让它在IE8和Chrome中运行(没有测试任何其他浏览器) - 如果你使用Backbone.history进行导航。
如果你在导航调用中使用两个前面的斜杠,它会像你想要的那样创建Url。
Backbone.history.navigate('//help');
我根本没有改变路线 - 它们不是以斜线开头的。在那里放一个斜线似乎打破了它。
我还应该注意到,我正在使用带有Backbone的Marionette,因为它可能会有所作为。
我希望这有助于某人。
答案 1 :(得分:2)
我相信你的第二个代码块与第三个完全不同。前面的斜杠在属性名称上设置。
routes: {
"help": "help", // #help
"search/:query": "search", // #search/kiwis
"search/:query/p:page": "search" // #search/kiwis/p7
}
不同于:
routes: {
"/help": "help", // #/help
"/search/:query": "search", // #/search/kiwis
"/search/:query/p:page": "search" // #/search/kiwis/p7
}
答案 2 :(得分:1)
这是一个丑陋的黑客攻击它:覆盖getHash()。这是原始代码:
getHash: function(windowOverride) {
var loc = windowOverride ? windowOverride.location : window.location;
var match = loc.href.match(/#(.*)$/);
return match ? match[1] : '';
},
在向正则表达式添加额外的斜杠之后似乎有效:
Backbone.History.prototype.getHash = function(windowOverride) {
var loc = windowOverride ? windowOverride.location : window.location;
var match = loc.href.match(/#\/(.*)$/);
return match ? match[1] : '';
}
此后导航可能无法正常工作,但可能会通过类似的黑客修复。