我正在制作我的第一个骨干应用程序。我已启用pushstate。在路由器中我有两条路线。
'link1(/)' : 'link1Route',
'link2(/)' : 'link2Route'
在我的link1页面上,我有一个指向链接2的链接,如下所示:
<a href="link2">Link2</a>
我点击链接,路由器接管,我按预期转到link2Route。但是,如果我将鼠标悬停在链接上,状态栏会指示该链接位于domain.com/link1/link2而不是domain.com/link2。鉴于link1页面上的相对url结构,这是正确的。不幸的是,如果用户决定在新窗口或标签中打开链接,则骨干网的路由器将不会生效。这是预期的,因为在新窗口或选项卡中打开会导致从服务器加载新页面。问题当然是domain.com/link1/link2不存在。
处理这种情况有哪些方法?感谢。
答案 0 :(得分:2)
如mateusmaso所示,您需要将链接目标更改为“/ link2”(即包括“/").
此外,在实施pushState时,如果用户请求“domain.com/link2”网址,请不要忘记您需要服务器回复内容。如果您愿意,响应可以是index.html
,但服务器必须返回该URL的页面。
如果您为所有与Backbone相关的URL返回index.html
,当您的Backbone应用程序启动时,路由处理代码将被触发并显示正确的数据。
如果您想了解有关路由的更多信息以及如何正确管理它而无需在调用trigger: true
时传递navigate
,请查看此免费样本pdf的第32-46页:{{3} (完全披露,我是书的作者)
答案 1 :(得分:0)
您必须在服务器级别提供正确的index.html - 因为这是在JavaScript甚至加载到页面之前。
http://readystate4.com/2012/05/17/nginx-and-apache-rewrite-to-support-html5-pushstate/