我正在使用backbone.js和WebMatrix。我在url中遇到hash(#)问题。更确切地说,我在路由器文件上有这段代码:
routes: {
"" : 'myBooks',
"books/:id" : 'bookDetails'
}
然后我初始化路由器
var initialization = function () {
Backbone.history.start();
};
因此,当我在浏览器上单击此URL:“localhost:9548 /#books / 1”时,我的控制台(firebug)上会显示以下消息:“NetworkError:404 Not Found - // localhost:9548 / books / 1 ”。 我已经找到了试图解决类似问题的帖子,但我对IIS Express(一般的服务器配置)一点也不熟悉。所以有些帖子也可以参考我的网络应用程序的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>
会解决我的问题吗?
我道歉,我没有提到我的网络应用程序的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(使用它们的最新版本)。