0

履歴バックボーン ルートを使用しようとしていますが、IE (または履歴 API をサポートしていない他のブラウザー) では正常に動作しません。

私の webapp には、各モジュールrequestを作成するこのマップがありますが、アクションはfunctionを呼び出す必要があります。

  • サイト/モジュールA/
  • サイト/モジュールA/アクション1/ID
  • サイト/moduleB/
  • サイト/モジュール B/アクション 1/ID

マッピング:

var MyRouter = Backbone.Router.extend({
    routes: {
        "moduleA/": "homeA",
        "moduleA/action1/:id": "action1", 
        // ...
    }
}

var app = new MyRouter();
Backbone.history.start({pushState: true});

私はこれを使ってナビゲートしています:

app.navigate('moduleA/',{trigger:true});

また

app.navigate('/moduleA/action1/4334',{trigger:true});

(リンククリックイベントを取得し、navigate(link.href,{trigger:true})を呼び出しています)

すべてが Chr/FF (履歴 API をサポートするブラウザー) で正常に動作し、ブラウザーで URL が更新され、関数が呼び出されます。

ただし、IE では、url は次のハッシュ形式に置き換えられます: site/#moduleA/ これを解決するために、history.start にルートを設定しようとしました。

Backbone.history.start({pushState: true, root:'/moduleA/'});

しかし、IE は次の形式を使用して URL を置き換えます: site/moduleA/#moduleA/またはsite/moduleA/#moduleA/action1/432432

では、なぜ IE は URL でルートを繰り返しているのでしょうか? どうすればこれを解決できますか?

前もって感謝します

4

1 に答える 1

0

に設定rootする'/moduleA/'と、バックボーンがsite/moduleAルートとして使用するように指示されます。これは予期される動作です。

バックボーンで覚える

routes: {
    "moduleA/": "homeA",  // #moduleA/
    "moduleA/action1/:id": "action1" // #moduleA//action1/:id
}

とは異なります

routes: {
    "/moduleA/": "homeA",  // #/moduleA/
    "/moduleA/action1/:id": "action1" // #/moduleA//action1/:id
}

を使用するときは、これを念頭に置いておくとよいでしょうapp.navigate

于 2012-06-07T18:14:32.170 に答える