2012-07-08 112 views
0

在我的jQuery Mobile中,我有2页,index.html和test.html。在索引页中有一个<p>标记,它有一个类,所以当我的javascript上点击<p>标记时,它想要加载test.html。Jquery Mobile预缓存页面

但是在jQuery Mobile的索引页面加载测试页面时,它不在DOM中。因此,为了进入测试页面并替换test.html中的div的内容,它必须首先加载到DOM中。所以这里是我在做什么:

当try2被点击时,我做一个加载页面进入DOM,然后我用新的html替换div,然后我切换到页面。 div的html永远不会改变。

$('.try2') 
    .click(function(){ 
    $.mobile.loadPage('test.html', { showLoadMsg: false }); 
    $('#mytest').html('i am here now').fadeIn('slow'); 
    $.mobile.changePage("test.html", { transition: "slideup"}); 
    }); 

回答

0

通过在指向第二页的链接上使用data-prefetch属性来预取页面。 Docs:http://jquerymobile.com/demos/1.1.0/docs/pages/page-cache.html

然后绑定到pageinit或pageshow事件,以在第二个页面转换到视图之前更新div。

您的当前代码将不起作用,因为事件处理程序中的前两行是异步的,所以要使用它们,您必须使用异步函数的回调函数。

更新

如果你想预缓存页面,但没有直接链接到页面,你总是可以创建一个虚拟链接,并从视图中隐藏:

<a data-precache href="page2.html" style="display:none;"></a> 
+0

如果我使用href,我已经使用了数据预取。哪些工作没有绑定到pageinit。但在同一页面上说,或者我可以使用pageLoad而不是数据预缓存。我不得不看父亲进入pageinit – SeeleyBoothe 2012-07-08 20:28:57

+0

好吧看看这样。索引页面是一个登录页面。所以当我点击登录按钮时,它必须将实际页面更改为Page1.html。现在在登录中没有将数据预取添加到的href。所以我只是不明白如何从页面更改为另一个,但它仍然能够访问所有的js功能 – SeeleyBoothe 2012-07-08 21:42:45

+0

这就是'pageinit'事件处理程序的用途。无论页面如何进入DOM,一旦jQuery Mobile初始化页面,您就可以运行代码。 – Jasper 2012-07-09 16:44:59