私は道に迷っています.... 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で問題が見つかりました-それは私のスクリプトではありません...ふう...それでもヒントは大歓迎です:-)