8

history.jsを使用しており、イベント ハンドラーがあります。

$(window).bind('statechange', function(){
    // Loads the content representing the state via ajax
});

ほとんどのコンテンツの変更はHistory.pushState([...])、ユーザーがリンクまたはボタンをクリックしたときにトリガーされます。

ただし、場合によっては、コンテンツの変更が JavaScript によって直接管理され (つまり、DOM 要素の変更、追加、または削除によって)、新しい状態を表すコンテンツを ajax 経由で読み込む必要はありません。

それでも、ユーザーがリロードを押したり、後で戻るボタンなどを使用したい場合は、状態をプッシュして、新しい状態を反映するように URL を変更する必要があります。

だから私の質問は次のとおりです:状態をプッシュする方法はありますが、場合によってはコンテンツのロードを回避するにはどうすればよいですか? statechange イベント ハンドラに渡すことができるフラグのようなものはありますか、それとも完全に回避できますか?

4

1 に答える 1

7

この質問も気になりました。私の決定は、グローバル変数を使用することでした。たとえば、window.stateChangeIsLocal を false として初期化できます。

window.stateChangeIsLocal = false;

ハンドラーstatechangeは次のようになります。

History.Adapter.bind(window,'statechange',function(){
    if (!window.stateChangeIsLocal) {
        someAjaxLoadFunction(History.getState().url);
    }
    else {
        window.stateChangeIsLocal = false;
    }
});

状態を変更し、新しい状態のコンテンツをロードしたくない場合は、単に;として設定window.stateChangeIsLocalします。true

もっとエレガントな解決策がいくつかあるかもしれませんが、それらを見つけて使用することができませんでした。

于 2012-10-16T15:37:54.817 に答える