1

我正在制作我的第一个主干应用程序。我启用了 pushstate。在路由器中,我有两条路线。

    'link1(/)' : 'link1Route',              
    'link2(/)' : 'link2Route'

在我的链接 1 页面上,我有一个指向链接 2 的链接,如下所示:

    <a href="link2">Link2</a>

我单击链接,路由器接管并按预期转到link2Route。但是,如果我将鼠标悬停在链接上,状态栏会显示链接位于 domain.com/link1/link2 而不是 domain.com/link2。鉴于 link1 页面上的相对 url 结构,这是正确的。不幸的是,如果用户决定在新窗口或选项卡中打开链接,骨干网的路由器将不会生效。这是意料之中的,因为在新窗口或选项卡中打开会导致从服务器加载新页面。问题当然是 domain.com/link1/link2 不存在。

有哪些方法可以处理这种情况?谢谢。

4

2 回答 2

2

正如 mateusmaso 所指出的,您需要将链接目标更改为“/link2”(即包括“/”)。

此外,在实现 pushState 时,不要忘记如果用户请求“domain.com/link2” URL,您需要您的服务器响应内容。如果您愿意,响应可以是index.html,但服务器必须返回该 URL 的页面。

如果您返回index.html所有与 Backbone 相关的 URL,当您的 Backbone 应用程序启动时,将触发路由处理代码并显示正确的数据。

如果您想了解有关路由的更多信息以及如何正确管理路由而无需trigger: true在调用时通过navigate,请查看此免费示例 pdf 的第 32-46 页:http: //samples.leanpub.com/marionette-gentle-introduction-sample .pdf(完全披露,我是本书作者)

于 2013-05-20T18:10:53.580 回答
0

您必须在服务器级别提供正确的 index.html - 因为这是在 JavaScript 甚至加载到页面之前。

http://readystate4.com/2012/05/17/nginx-and-apache-rewrite-to-support-html5-pushstate/

于 2013-02-11T22:06:49.860 回答