4

私は道に迷っています.... JQMのドキュメントに従って、pagebeforechangeでJquery Mobileトランジションをリダイレクトしようとしています。

これは、前方遷移と後方遷移の両方で機能するはずです。技術的にはそうですが、後方遷移で問題が発生しています。最初の 1 つが機能し、その後、戻るボタンをクリックするたびに、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

再現するには、ページ2メニュー、ページ3メニューをクリックし、コンソールをクリアし、ブラウザを1回クリックしてコンソールを確認し(SINGLE RUN)、ブラウザを再度クリックしてコンソールを確認します(TWO RUNS ...

質問
私は解決策を探しているわけではありません.2番目の後方遷移が2回発生する原因についてのいくつかのアイデアです.

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

EDIT
sript に追加するコンソールが増えるほど、2 番目の不要なハッシュ変更が少し遅れて発生することが明らかになります。最初は JQM のfake_onhashchangeイベントに関連しているのではないかと考えましたが、これを完全に削除しても問題は解決しませんでした。探し続けてください。

EDIT2- Githu bで問題が見つかりました-それは私のスクリプトではありません...ふう...それでもヒントは大歓迎です:-)

4

1 に答える 1

1

Ok。見つけたと思います。これは、pushstate ハンドラーのバグです。

Githubの詳細と可能な修正

于 2012-04-26T21:43:17.627 に答える