2012-04-24 15 views
0

私はJquery Mobileサイトでたくさんのプラグインを使用していますが、一度DOMに残っているページを離れると "クリーンアップ"する最良の方法を探しています。Jquery Mobile/Jqueryにページを残すときにイベント/プラグインのバインドを解除する必要がありますか?

質問:プラグインバインディングをアンバインド/オフ/アンデリゲートして、ページをビューに戻すときに再初期化するか、ユーザーが別のページにいる間にすべてを「バックグラウンドで」実行する必要がありますか?私はそうのようなプラグインを設定していた場合

いずれかの方法で、何が、これを行うための最善の方法のようになります。

// 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のモバイルアンカー・ページであると言います常にDOMにとどまります)、ユーザーがページを離れて再ロードするときに再起動するか、スライダをバックグラウンドで実行し続けると、オフになりますか?

ここで最も有効なのは何ですか?

答えて

2

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

アニメーションのページ遷移が機能するには

は、あなたからとの両方に を移行しているページはDOMにする必要があります。ただし、古いページを に保存すると、DOMがブラウザのメモリをすぐにいっぱいにして、一部のモバイルのブラウザが遅くなったり、クラッシュする可能性があります。

jQuery Mobileには、DOMを整理しておくための簡単なメカニズムがあります。 Ajax経由でページを読み込むたびに、後で (技術的には、pagehideイベントで)から移動すると、jQuery Mobileはそのページを というDOMを削除してフラグを付けます。削除したページに再度アクセスすると、 ブラウザは キャッシュからページのHTMLファイルを取得できます。そうでない場合は、サーバーからファイルを再取得します。 ( ネストされたリストビューの場合は、jQueryのモバイルは、あなたが リストの一部ではありませんページに移動したら ネストされたリストを構成するすべてのページが削除されます。)複数ページのテンプレート内の

ページが上がりません でこの機能の影響を受けません - jQuery MobileはAjax経由でロードされたページのみを削除します。

出典:http://jquerymobile.com/demos/1.1.0/docs/pages/page-cache.html

内部jQueryのモバイル.remove()使用:

.empty()と同様

.remove()方法は DOMから要素をとります。要素そのものを削除する場合は、.remove()を使用してください。 もすべて内部にあります。要素自体に加えて、要素に関連付けられたすべての バウンドイベントとjQueryデータが削除されます。

出典:http://api.jquery.com/remove/

+0

は時々私はDOM内のページを維持しています。その場合、私は何らかの「クリーナー」を探していました – frequent

+1

@frequent '.remove()'はあなたの友人です。また、 '.remove()'を使用している要素に対するJS参照を削除します。同様に: 'var $ image = $( '#my-img');' – Jasper

関連する問題