backbone.js と WebMatrix を使用しています。ただし、URLのハッシュ(#)に問題があります。より正確には、ルーターファイルに次のコードがあります。
routes: {
"" : 'myBooks',
"books/:id" : 'bookDetails'
}
次に、ルーターを初期化します
var initialization = function () {
Backbone.history.start();
};
そのため、ブラウザで「localhost:9548/#books/1」という URL をクリックすると、コンソール (firebug) に「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 を無効にすると正しく機能しません。もう 1 つの特徴は、Mozilla と Chrome でこの問題が発生することですが、Internet Explorer (それらの最新バージョンを使用) では発生しません。