2012-08-17 80 views
0

我有一個隱藏標籤的列表。我嘗試使用jquery移動文檔中描述的data-prefetch屬性。唯一的問題是它一次性觸發了所有這些頁面的ajax請求,並且他們無法下載它們的訂單。按順序jQuery Mobile緩存頁面

該順序對於下一個頁面通過刷卡顯示非常重要。

所以我決定嘗試通過這段代碼以編程方式緩存鏈接。

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)。在( 'pageshow')我叫cache_next_page()。這部分工作正常,真正的問題是,使用$ .mobile.loadPage時,一旦第一個緩存頁面對dom感興趣,就不會啓動與jquery移動頁面相關的事件。

我已經嘗試過pageshow,pageinit和pageload,但它們只在第一次加載頁面時觸發。現在,如果我加載直接啓動緩存的第一頁。也就是說,在訪問應用程序中的任何其他頁面時,它會觸發所有預期的事件,例如頁面加載。

只有當您在page_1上啓動,然後轉到page_2(具有啓動緩存的代碼)時,它將無法在將緩存頁面插入到dom時觸發頁面加載事件。

回答

0

我發現那裏有一個.done從.loadPage返回的對象,所以我修改了我的代碼,如下所示,以便它可以按順序緩存我的鏈接。

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(); 
     }); 
    } 
}