2012-07-13 22 views
8

私はhistory.jsを使用していますが、ユーザがリンクやボタンをクリックしたときに、私はHistory.pushState([...])によってhistory.jsのstatechangeをトリガーせずに状態を変更する方法は?

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

ほとんどのコンテンツの変更がトリガされているイベントハンドラを持っています。

コンテンツの変更はjavascriptで直接管理されます(DOM要素を変更、追加、削除するなど)。新しい状態を表すコンテンツをajax経由で読み込む必要はありません。

それでも、私は新しい状態を反映した状態をプッシュし、URLを変更する必要があり、ユーザーはリロード以降の[戻る]ボタンを使用したい打つ必要があるなど

だから私の質問は:どのように私はプッシュしませんある状態ではコンテンツを読み込まないようにします。 statechangeイベントハンドラに渡すことのできる種類のフラグがありますか、それともそれを回避することはできますか?

答えて

7

私はこの質問についても疑問に思いました。私の決定はグローバル変数を使うことでした。たとえば、あなたは偽としてwindow.stateChangeIsLocalを初期化することができます:あなたが状態を変更してのコンテンツをロードしたくない場合は

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

window.stateChangeIsLocal = false; 

あなたstatechangeハンドラは、このような何かを探していることができ新しい状態、ちょうどwindow.stateChangeIsLocaltrueと設定します。

多分もっと洗練された解決策がありますが、私はそれを見つけて使用することができませんでした。

+0

グローバルヒストリオブジェクトのプロパティを設定することを除いて、私自身の解決策は何か類似していました。この問題については、この質問(http://stackoverflow.com/questions/8744487/statechange-is-firing-whenever-i-do-a-push-state?rq=1)を参照してください。 – jgivoni

関連する問題