6

ユーザーが特定のURLルートにアクセスしたときに、Backbone.jsルーターを使用して特定の初期化メソッドを起動しています。したがって、バニラアンカータグを介して移動すると、バックボーンルーターで/posts/1関連付けられているコールバックがすべて起動されます。/posts/:idが設定されている場合、これは最新のブラウザで正常に機能しますBackbone.history.start({ pushState : true })。ただし、IEでは、ヒットしようとするユーザー/posts/1はにリダイレクトされ/#posts/1ます。これは、意味のないハッシュ文字列を含む私のホームページにすぎません。

明確にするために、pushStateは必要ありません。URLをブラウザの履歴にプッシュしようとはしていません。私はそれらを読み、次にコールバックを起動しようとしています。これはどのブラウザでも実行可能であるはずです。

シンプルな機能のようですが、困っています。

ありがとう!

4

3 に答える 3

7

ここで自分の質問に答えることができます。ここで必要なタイプの機能は、次の方法で実現できます。

var suffix_pattern = new RegExp('\/?' + config.history_root + '\/?','i');

// if IE
if (!Modernizr.history) {

    // initialize router/Backbone.history, but turn off route parsing,
    // since non-window.history parsing will look for a hash, and not finding one,
    // will break our shit.
    Backbone.history.start({ silent: true, hashChange: true });

    // convert any post-# elements to a standard URL to be parsed by our router
    var subroute = window.location.hash.replace('#', '/').split('?')[0],
           route = window.location.pathname.replace(suffix_pattern, '') + subroute;

    Backbone.history.loadUrl(route);
} else {
    Backbone.history.start({ pushState: true, silent: true });
    Backbone.history.loadUrl(Backbone.history.getFragment().replace(suffix_pattern, '').split('?')[0]);
}
于 2013-01-30T15:04:59.153 に答える
0

これは私のために働いた:Backbone.history.start({root:'/ my_app_dir_here /'});

于 2014-12-02T16:34:32.707 に答える
0

pushStateをサポートしていないブラウザでのajaxページの読み込みを気にしない場合は、オプションを使用してください{hashChange: false}。これにより、ルートが変更されるたびにハードページが読み込まれます。

例えば

Backbone.history.start({ pushState: true, hashChange:false });

Backbone.jsドキュメントから:

pushStateを使用したいが、それをサポートしていないブラウザーでネイティブにフルページ更新を使用する場合は、オプションに{hashChange:false}を追加できます。

于 2015-06-11T18:27:18.807 に答える