2012-04-26 6 views
4

私は失われています.... pagebeforechangeにJquery Mobileの移行をリダイレクトしようとしています - JQM docsによると。Jquery Mobileの逆方向遷移でhashchangeが2回発生するのはなぜですか?

これは、順方向および逆方向の両方の遷移に有効です。技術的には私は逆方向の遷移に関する問題にぶち当たっています。最初の作品は、すべてのバック - btnのクリック後に、私は2 +バックグラウンドの遷移を取得しています。

私はURLを除外しました(今は完全なパスとパスとオブジェクト($( '#page')のようなもの)のみを渡しています;それはそうではありませんでした。 。トンそれを見つけることは

たぶん他の誰かが何かを見ているか、私にヒントを与えることができます見てみるためにありがとう:。コメントを

簡単なセットアップ:

// hashchange listener - just to see when hashchange fires 
$(window).on('hashchange', function(e, data){ 
    console.log("hashchange detected"); 
    }); 

// re-router 
$(document).on("pagebeforechange", function (e, data) { 

     // block multiple events 
     if(data.options.fromHashChange == true) { 
      if(self.options.$blockMultiPbc == true) { 
      console.log("blocked 1"); 
      self.options.$blockMultiPbc = false; 
      return; 
      } 
     } 

     // block $('#page') page-calls (triggered from trailing hashchange 
     if(typeof data.toPage !== 'string') { 
      console.log("blocked 2"); 
      return; 
      } 

     // redirect 
     if(data.options.fromHashChange == true) { 
      console.log("executing"); 
      // for hashchanges 
      self.panelHash(e, data); 
      } else { 
       // for changepages 
       self.panelTrans(e, data); 
       } 
     }); 

     // panelHash function - here I reconfig data.options to redirect 
     panelHash: function(e, data) { 

      // block multiple pagebeforechanges 
      self.options.$blockMultiPbc = true; 

      if (some condition) { 
      console.log("MULTIVIEW"); 
      // tweak changepage options 
      data.toPage = ...newULR (not $('object')) 
      data.options.fromPage = ...new fromPage 
      data.options.changeHash = true; 
      data.options.reverse = true; 
      console.log(newURL); 
      } else { 
       // JQM does this 
       } 
      } 

をここでは、サンプルのページです:sample

(...二つの実験)

を、PAGE2メニューPAGE3メニューをクリックしreprodudeコンソールをクリアし、コンソール(SINGLE RUN)を確認し、再びブラウザをクリックし、コンソールをチェックし、バック一度ブラウザをクリックし

質問
私は解決策を探しているわけではありません.2回目の後方への移行を2回引き起こす可能性のあるアイデアだけです。

いくつかのアイデアをありがとう!

EDIT
私はより多くのそれは第二の不要なhashchangeが短い遅延の後に来ていることを、明らかになっsriptに追加しているより多くのコンソール。私は最初にJQMs fake_onhashchangeイベントに関連すると思っていましたが、これをすべて削除することはやりませんでした。執着し続ける。

EDIT2は - issue on Githu Bを見つけた - それが私のスクリプトではありません...あー...それでもヒントは歓迎:-)

答えて

1

OKです。私はそれを見つけたと思う。それはpushstateハンドラのバグです。

詳細および可能な修正on Github

関連する問題