2012-08-17 83 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(); 
     }); 
    } 
}