我使用 coenraets 的Employee Directory作为我的 Backbone 应用程序的起点。我想做的第一件事是更改路由以使用 HTML5 PushState 而不是 hash-hash bang-bangs。
首先我改变了:
<ul class="nav">
<li class="active"><a href="/">Home</a></li>
<li><a href="/contact">Contact</a></li>
</ul>
然后:
Backbone.history.start({ pushState: true });
现在,如果您转到localhost:8000/contacts
而不是localhost:8000/#/contacts
它会给出 404 错误,无论您是单击导航栏还是手动键入 URL。
难道我做错了什么?谢谢。
更新:我添加了这段代码,现在当我点击链接[stateful]时它工作正常。但是,如果我在其中刷新页面,localhost:8000/contacts
我仍然会收到 404 error [stateless]。
$(document).on('click', 'a:not([data-bypass])', function(e){
href = $(this).prop('href')
root = location.protocol+'//'+location.host+'/'
if (root===href.slice(0,root.length)){
e.preventDefault();
Backbone.history.navigate(href.slice(root.length), true);
}
});
更新 2
除了上面的代码,我还在我的 Express.js 应用程序中添加了以下路由。如果您仔细观察,您会注意到 URL 栏从localhost:3000/#contact
变为 ,localhost:3000/contact
尽管它发生得非常快。也许有更好的方法来做这件事,但我暂时对这种方法感到满意。
app.get('/contact', function(req, res) {
res.redirect('/#contact');
});