在启用pushState后导航不仅仅用于空片段

时间:2015-02-05 23:45:11

标签: javascript .htaccess backbone.js marionette pushstate

所以,我有一个Backbone Marionette应用程序完全使用哈希。然后,我决定启用pushState以获得更好的UX URL。

我在以下位置访问该应用:

http://localhost:8888/multikanban/app

我应用了以下更改:

  1. 启用pushState

    Backbone.history.start({pushState: true, root: "/multikanban/app/"});
    
  2. 定义以下.htaccess

    <ifModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_URI} !index
        RewriteRule (.*) app/index.html [L]
    </ifModule>
    
  3. 此时,应用程序加载没有问题,我可以四处移动,登录,等等。但是,当调用App.navigate(&#34;&#34;)时(当我需要进入初始应用程序状态时),我收到以下错误:

    Uncaught SyntaxError: Unexpected token <
    
    landing_app.js:15 Uncaught TypeError: Cannot read property 'showLanding' of undefinedlanding_app.js:15 (anonymous function)require.js:1658 context.execCbrequire.js:874 Module.checkrequire.js:1121 (anonymous function)require.js:132 (anonymous function)require.js:1164 (anonymous function)require.js:57 eachrequire.js:1163 Module.emitrequire.js:925 Module.checkrequire.js:1151 Module.enablerequire.js:782 Module.initrequire.js:1178 callGetModulerequire.js:1572 context.completeLoadrequire.js:1679 context.onScriptLoad
    
    require.js:1903 Resource interpreted as Script but transferred with MIME type text/html: "http://localhost:8888/multikanban/scripts/apps/landing/show/show_controller.js".
    

    使用App.navigate(&#34;&#34;)我只更新网址,没有任何东西应该被转移&#34;转移&#34;因错误说明......

    观察:

    1. App.navigate(&#34;&#34;)在使用pushState之前工作。
    2. 将App.navigate(&#34;&#34;)更改为类似App.navigate(&#34; a&#34;)使其正常工作但当然URL错误..
    3. 评论App.navigate(&#34;&#34;)并没有让应用程序崩溃,它根本不会更新URL,所以是的问题应该是App.navigate(&#34) ;&#34)
    4. 如何让App.navigate(&#34;&#34;)工作?为什么该命令显然与服务器交互,不应该只是更新URL和历史记录?我可以在哪里询问这个问题?

2 个答案:

答案 0 :(得分:0)

您获得的错误似乎表明requirejs未正确映射到您指定的路径。

答案 1 :(得分:0)

好的,经过多次努力,我修好了。显然,它与后者的变化无关,而是与上个月神秘工作的requirejs配置有关:D

我从

更改了index.html中的data-main和src
<script data-main="scripts/main.js" src="scripts/vendor/requirejs/require.js"></script>

<script data-main="/multikanban/app/scripts/main.js" src="/multikanban/app/scripts/vendor/requirejs/require.js"></script>

此外,如果您有任何样式,请确保在样式的href中定义绝对路径。

Cheerio!

感谢@jdaudier的帮助