骨干路由不会被调用(Backbone Routes Not Being Called)

2019-08-03 18:44发布

我有一个奇怪的问题,我一直无法弄清楚的呢。 这很简单,这可能是为什么我在与它麻烦:)

首先,这里的路由表...

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 });

很显然,这是在正确的位置,因为路线的工作只是没有分航线。 我已经试过了root的选择Backbone.history和无声的parameter都没有任何的运气。

我想这是一个配置/设置问题,但我一直没能找到任何答案。 我究竟做错了什么? 任何帮助深表感谢。

顺便说一句,我使用requirejs和骨干样板,但我不明白怎么会有所作为。

更新:虽然提供的答案是技术上是正确的,问题是骨干样板。 看到这个底部博客文章作出解释。 我有同样的问题,因为第一个评论者那里。

Answer 1:

正如在评论中讨论的,问题是,使用推送状态风格的URL时,服务器无法识别主干航线的URL。

为了说明,假设您的应用程序的根在server/app/index.html ,和你想使用的URL骨干路由/report/print 。 随着网址片段路由 ,这是好的:

http://server/app/index.html#report/print

服务器忽略之后的部分#和回报的index.html; 然后负载骨干路由report/print

但是,如果你正在使用推状态路由 ,那么URL看起来是这样的:

http://server/app/index.html/report/print

而服务器抛出一个404错误,因为它并不在这条道路承认任何东西,所以骨干,是从来没有加载。


的解决方案是:

  1. 由于Backbone.js的文档注,修改服务器代码,以便服务器使每个骨干网的路由正确的内容,或
  2. (我认为这是比较容易)把一个URL重写来代替Web服务器(在IIS , Apache的 ),这样它会返回index.html因为这是像主干航线的任何请求index.html/report/printindex.html/report/add等。

在IIS中,例如,你把你的应用程序根目录下的web.config中的以下内容:

<rewriteMaps>
    <rewriteMap name="StaticRewrites">
        <add key="index.html/report/print" value="index.html" />
        <add key="index.html/report/add" value="index.html" />
        <!-- etc -->
    </rewriteMap>
</rewriteMaps>


文章来源: Backbone Routes Not Being Called