2

我正在使用backbone.js 和WebMatrix。我在 url 中有 hash(#) 的问题。更准确地说,我的路由器文件中有以下代码:

routes: { 
          ""          : 'myBooks', 
          "books/:id" : 'bookDetails'
} 

然后我初始化路由器

var initialization = function () {

        Backbone.history.start();
};

因此,当我在浏览器上单击此 URL:“localhost:9548/#books/1”时,我的控制台(萤火虫)上会出现以下消息“NetworkError: 404 Not Found - //localhost:9548/books/1”。我发现已经有帖子试图解决类似的问题,但我对 IIS Express(一般的服务器配置)一点也不熟悉。因此,例如一些帖子也引用了我的 Web 应用程序的 web.config,但我没有。

因此,例如,如果我将使用以下代码创建一个 web.config 文件

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.webServer>
<rewrite>
    <rewriteMaps>
        <rewriteMap name="StaticRewrites">
            <add key="index.html#books/*" value="index.html" />
        </rewriteMap>
    </rewriteMaps>
</rewrite>
</system.webServer>
</configuration>

会解决我的问题吗?

很抱歉,我没有提到我的 web 应用程序的 ui(并且唯一)我使用的是 jquerymobile。因此,我禁用了 jquerymobile 的 ajax 导航:

$.mobile.ajaxEnabled = false;
$.mobile.linkBindingEnabled = false;
$.mobile.hashListeningEnabled = false; 
$.mobile.pushStateEnabled = false;
$.mobile.changePage.defaults.changeHash = false;

除了页面的更改由以下代码处理:

var utility = {}; 
utility.changePage = function( viewID, effect, direction, updateHash ) {
   viewID.attr('data-role', 'page');
   $.mobile.changePage( viewID,{changeHash: updateHash}); 
};

最后处理我的路线的功能如下:

bookDetail: function (id) { 
   var myBook = myCollection.get(id); 
   var bookDetails = new BookDetails({ model: myBook });
   $('body').append($(bookDetails.render().el));
   $.mobile.changePage(bookDetails.$el, {changeHash: false }); 
}

重要提示:由于 jquerymobile (1.3.0) 的最新版本,可能会出现问题。准确地说,禁用 hashListeningEnabled 无法正常工作,因为我已阅读。另一个特点是我在 Mozilla 和 Chrome 上遇到了这个问题,但在 Internet Explorer 上没有遇到这个问题(使用它们的最新版本)。

4

0 回答 0