0

私はJqueryMobileサイトで多数のプラグインを使用しており、DOMに残っているページを離れたら、「クリーンアップ」するための最良の方法を探しています。

質問は、プラグインバインディングのバインド解除/オフ/解除を試みて、ページがビューに戻されたときに再初期化する必要がありますか、それともユーザーが別のページにいる間、すべてを「バックグラウンド」で実行したままにする必要がありますか?

いずれにせよ、私が次のようなプラグインを設定している場合、これを行うための最良の方法は何でしょうか?

 // example using flexslider plugin
 $('div:jqmData(role="page").basePage').on('pagecreate.flexslider', function() {    

      // make sure this fires only once when pagecreates fires more often
      if ( $('.flexslider').length > 0 && $('.flexslider').jqmData('bound') != true ) {
          // lock           
          $('.flexslider').jqmData('bound',true);
          $('.flexslider').flexslider({ 
                    animation: "slide", 
                    controlsContainer: $(".flex-container")
                    }); 
          } 
      });

質問:
これは私のJquery Mobileアンカーページ(常にDOMにとどまる)だと言ってください。ユーザーがページを離れて再読み込み時に再初期化するか、スライダーをバックグラウンドで実行し続ける必要がありますか?

ここで最高の実践は何ですか?

4

1 に答える 1

2

AJAXを介してDOMに取り込まれたページを離れると、jQuery Mobileは、その子孫とそのすべてのイベントハンドラー/データを含むページをDOMから自動的に削除します。

アニメーション化されたページトランジションが機能するには、トランジション元とトランジションの両方のページがDOMにある必要があります。ただし、古いページをDOMに保持すると、ブラウザのメモリがすぐにいっぱいになり、一部のモバイルブラウザの速度が低下したり、クラッシュしたりする可能性があります。

したがって、jQuery Mobileには、DOMを整理するためのシンプルなメカニズムがあります。jQuery Mobileは、Ajaxを介してページをロードするたびに、後で(技術的には、pagehideイベントで)DOMから移動するときに、DOMから削除されるページにフラグを立てます。削除されたページに再度アクセスすると、ブラウザはそのページのHTMLファイルをキャッシュから取得できる場合があります。そうでない場合は、サーバーからファイルを再フェッチします。(ネストされたリストビューの場合、リストの一部ではないページに移動すると、jQuery Mobileはネストされたリストを構成するすべてのページを削除します。)

複数ページのテンプレート内のページは、この機能の影響をまったく受けません。jQueryMobileは、Ajaxを介して読み込まれたページのみを削除します。

ソース: http: //jquerymobile.com/demos/1.1.0/docs/pages/page-cache.html

内部的にjQueryMobileは以下を使用します.remove()

.empty()と同様に、.remove()メソッドはDOMから要素を取り出します。要素自体とその中のすべてを削除する場合は、.remove()を使用します。要素自体に加えて、要素に関連付けられているすべてのバインドされたイベントとjQueryデータが削除されます。

ソース:http ://api.jquery.com/remove/

于 2012-04-24T16:22:54.950 に答える