Jquery Mobileは、ナビゲートするときにDOMにいくつかのページを保持するため、前後に移動するときにページに複数回アクセスされる可能性があります。
以下のようなページにバインドしている場合、このバインディング内で、「ネストされた要素のバインディング」を含むすべてのページロジックを実行します。
// listener for the page to show:
$(document).on('pagebeforeshow.register', '#register', function() {
// stuff
// page event bindings:
$(document).on('click.register', '.registerSubmitter', function(e) {
// do something
});
});
前後に移動すると、ネストされたバインディングが複数回アタッチされます。
現在、このように回避しようとしています(機能しません...):
$(document).on('click', '.registrySubmitter', function(e) {
if ( $(this).attr('val') != true ) {
$(this).attr('val') == true;
// do something
}
});
したがって、最初のバインディングのみを通過させてから、他のすべてのバインディングの試行をブロックします。
これは機能しますが、最適にはほど遠いです。
質問:
イベントバインディングを適切にアンバインド/オフにする方法とタイミングを教えてください。一般的な方法(すべてを殺す)はありますか、それともバインディングごとにこのバインディングを実行する必要がありますか?おそらくもっと重要なのは、パフォーマンスの面で、一度バインドを実行してそれを保持するか、ユーザーがページにアクセス/ページを離れるときにバインド/バインド解除する方がよいでしょうか。
入力ありがとうございます!
編集:
だから私はすべてのイベントの名前空間を作成してから、次のようにpageHideをリッスンします:
$(document).on('pagehide.register', '#register', function(){
$(document).off('.registryEvents');
});
これはバインドが解除されているように見えますが、ページのカスタムダイアログ/選択メニューを閉じるたびに発生するため、ページを離れる前にバインドを失っています。部分的な答えですが、off()を使用する必要がありますが、選択メニューを開いたり閉じたりするのではなく、実際に残っているページにバインドする方法はありますか?