0

我有一个隐藏的标签列表。我尝试使用 jquery 移动文档中描述的 data-prefetch 属性。唯一的问题是它一次触发所有这些的 ajax 请求,并且没有加载它们的顺序的 garentee。

在接下来通过滑动显示哪些页面时,排序非常重要。

所以我决定尝试通过这段代码以编程方式缓存链接。

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,但它们只在第一次加载页面时触发。现在,如果我加载直接启动缓存的第一页。也就是说,在不访问应用程序中的任何其他页面的情况下,它确实会触发所有预期的事件,例如页面加载。

只有当您从 page_1 开始然后转到 page_2(具有启动缓存的代码)时,才会在将缓存页面插入 dom 时触发 pageload 事件。

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 回答