我正在使用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 上没有遇到这个问题(使用它们的最新版本)。