【发布时间】:2012-12-10 04:18:48
【问题描述】:
我有一个奇怪的问题,我还没有弄清楚。这很简单,这可能就是我遇到问题的原因:)
首先,这是路由表...
routes: {
'': 'root', //called
'report': 'report', // called
'report/add': 'reportAdd', // not called
'report/print': 'reportPrint', // not called
'report/settings': 'reportSettings', // not called
},
您会看到我标记了哪些有效,哪些无效。问题归结为所有子路由(即report/add)不匹配。
主干历史在 main.js 中被正确调用,如下所示:
app.Router = new Router();
Backbone.history.start({ pushState: true });
显然,这是在正确的位置,因为路线正在工作,而不是子路线。我已经尝试了Backbone.history 的root 选项和静音parameter 都没有任何运气。
我想这是配置/设置问题,但我找不到任何答案。我究竟做错了什么?非常感谢任何帮助。
顺便说一句,我正在使用 requirejs 和 Backbone Boilerplate,但我不知道这会有什么不同。
更新:虽然提供的答案在技术上是正确的,但问题出在 Backbone Boilerplate 上。请参阅此blog post 的底部以获取说明。我和那里的第一个评论者有同样的问题。
【问题讨论】:
-
这应该可以正常工作 (jsfiddle.net/ambiguous/stBVC),你在做什么而小提琴不是?
-
臭气熏天的
pushState选项是问题所在。现在我得到了散列(#report/add)网址,但它确实有效。如何摆脱哈希 URL 并使用 pushState? -
所以
<a href="#report/add">在您不使用pushState时有效,但在您使用pushState时<a href="/report/add">失败? -
否,
<a href="/report/add"> works but it automatically adds the # to the URL. Reloading the page on/report/add` 失败,但访问#report/add有效。我知道这很奇怪。 -
我认为您必须在使用推送状态 URL 时包含某种服务器端 URL 重写,不是吗?即,您必须确保您的服务器在收到
/report/add之类的请求时知道返回/index.html或其他任何内容。
标签: backbone.js requirejs backbone-boilerplate