从缓存动态页面停止jQuery mobile

时间:2011-08-03 20:12:12

标签: jquery caching jquery-mobile

使用jQuery mobile我使用动态“页面”模板,根据用户输入插入自定义内容。

这一切都有效,但是一旦页面被缓存就会被创建,如果您返回并进行新选择,则不会显示新值。我尝试过应用以下修复程序:

$('#instrument').bind('pagehide', function(){
  $(this).remove();
});

哪个会删除该页面,但如果您尝试导航回该页面,则不会重新初始化,我会继续将其推回到我应用的开头。

必须使用pagebeforecreate将动态内容添加到页面中(实际HTML似乎并不重要,因此我不会在此处包含它),否则将不会格式化。如果我使用pagebeforeshow,则内容将不会被格式化,但如果您返回并进行新选择,内容将会更改。

我意识到pagebeforecreate将缓存页面,但由于内容未格式化,我似乎无法使用任何其他方法:(

我无法为我的生活找到解决办法!

3 个答案:

答案 0 :(得分:5)

尝试使用pagebeforeshow,但在显示页面时调用page()以修复所有格式。

像这样:

$('#instrument').bind('pagebeforeshow', function() {
  // Do your content insertion
});

$('#instrument').bind('pageshow', function() {
  $(this).page();
});

您可能会发现这只有“一半”有效(在更新页面时不会更新格式化),在这种情况下,您可以尝试this trick:将页面包装在临时元素中并调用{{1在包装器上。

page()

答案 1 :(得分:1)

  

新的DOM缓存管理功能:默认情况下为

     

由于动画页面转换需要您所在的页面   而你正在转换的那个都在DOM中,我们添加页面   导航时到DOM。到目前为止,那些页面会   继续留在DOM中,直到你完成整页刷新   一直担心我们可能会在某些方面达到内存上限   设备并导致浏览器减速甚至崩溃。

     

对于Beta 2,我们添加了一个简单的机制来保持DOM整洁。它   这样工作:每当通过Ajax加载页面时,它都会被标记   一旦您导航到另一个页面,从DOM中删除   (技术上,在页面上)。如果您返回已删除的页面,则   浏览器可能能够从它的缓存中检索文件,或者它会   如果需要,从服务器重新请求它。在嵌套列表的情况下,我们   导航到后,删除构成嵌套列表的所有页面   一个不属于列表的页面。包含在页面中的页面   多页设置不受此功能的影响 - 仅限页面   由Ajax引入的是由jQuery Mobile以这种方式管理的。

     

名为domCache的新页面选项控制是否保留页面   在DOM中作为缓存它们的方式(用于工作的方式)或   保持DOM清洁并删除隐藏页面(新方法)。默认情况下,   domCache设置为false以保持DOM大小的主动管理。如果你   将此设置为true,您需要注意自己管理DOM   在各种设备上彻底测试。

     

要在各个页面上设置domCache选项   有选择地缓存页面,你可以添加data-dom-cache =“true”   属性到页面容器或以编程方式设置它:

elem.page({ domCache: true });
     

domCache选项也可以全局设置。这是如何转向   DOM缓存,因此它的工作方式与原来一样:

$.mobile.page.prototype.options.domCache = true;

答案 2 :(得分:0)

我已用这个简单的解决方案解决了这个问题:

将另一个带随机号码的参数添加到您的网址http://www.yourdomain.com/ws.php?opcion=1&**cache_hack=" +Math.random();**

带有随机的最后一个参数使“diferente”调用和jquery mobile不缓存.-

还要添加你的php脚本:

`header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
 header("Cache-Control: no-cache");
 header("Pragma: no-cache");`