2

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 (それらの最新バージョンを使用) では発生しません。

4

0 に答える 0