0

非表示になっているタグのリストがあります。jquery mobileのドキュメントで説明されているように、data-prefetch属性を使用してみました。唯一の問題は、それらすべてに対してajaxリクエストを一度に起動し、それらがロードされる順序の保証人がいないことです。

スワイプによって次に表示されるページでは、順序が非常に重要です。

そこで、このコードを介してプログラムでリンクをキャッシュすることにしました。

var last_cache_page = false;

function cache_next_page(){
if(last_cache_page == false){
    var cache_link = $('.cache').first();
    last_cache_page = cache_link;
}
else{
    var cache_link = last_cache_page.nextAll('.cache');
    last_cache_page = cache_link;
}

//Start Caching any other pages that we want to swip to
$.mobile.loadPage(cache_link.attr('href'), {showLoadMsg: false});
}

したがって、$(document).on('pageshow')では、cache_next_page()を呼び出します。その部分は正常に機能します。実際の問題は、$。mobile.loadPageを使用する場合、最初にキャッシュされたページがDOMに関心を持った後、jqueryモバイルページ関連のイベントが発生しないことです。

pageshow、pageinit、pageloadを試しましたが、ページが最初に読み込まれたときにのみ起動します。ここで、キャッシュを直接開始する最初のページをロードするとします。つまり、アプリケーション内の他のページにアクセスしなくても、ページロードなどの予想されるすべてのイベントがトリガーされます。

キャッシュされたページがdomに挿入されたときにページロードイベントがトリガーされないのは、page_1で開始してからpage_2(キャッシュを開始するコードが含まれている)に移動した場合のみです。

4

1 に答える 1

0

.loadPageから返されるオブジェクトに.doneがあることがわかったので、リンクを順番にキャッシュできるようにコードを次のように変更しました。

var last_cache_page = false;

function start_caching(){
    if(last_cache_page == false){
        var cache_link = $('.cache').first();
        last_cache_page = cache_link;
    }
    else{
        var cache_link = last_cache_page.nextAll('.cache').first();
        last_cache_page = cache_link;
    }

    if(cache_link.length == 1){
        //Start Caching any other pages that we want to swipe to
        new_page = $.mobile.loadPage(cache_link.attr('href'), {showLoadMsg: false});
        new_page.done(function(){
            start_caching();
        });
    }
}
于 2012-08-20T13:58:28.100 に答える