从缓存动态页面停止jQuery mobile

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

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

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

这会删除页面,但如果您尝试导航回该页面,它将不会重新初始化,我将继续被推回到我的应用程序的开头。

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

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

我不能为我的生活搞清楚!

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

像这样:

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

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

 $('#instrument').bind('pageshow', function() { $(this).wrap('
'); $('#temporary-instrument-wrapper').page(); $(this).unwrap(); });

新的DOM缓存管理function:默认情况下为On

由于动画页面过渡要求您所在的页面和您要转换的页面都在DOM中,因此我们会在您浏览时向DOM添加页面。 到目前为止,这些页面将继续保留在DOM中,直到您进行整页刷新,因此始终存在一个问题,即我们可能会在某些设备上达到内存上限并导致浏览器速度变慢甚至崩溃。

对于Beta 2,我们添加了一个简单的机制来保持DOM整洁。 它的工作方式如下:每当通过Ajax加载页面时,一旦您导航到另一个页面(技术上,在页面隐藏),它就会被标记为从DOM中删除。 如果您返回已删除的页面,浏览器可能能够从其缓存中检索文件,或者如果需要,它将从服务器重新请求它。 在嵌套列表的情况下,一旦导航到不属于列表的页面,我们将删除构成嵌套列表的所有页面。 多页设置中包含的页面根本不受此function的影响 – 只有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; 

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

使用随机数添加另一个参数到您的url,例如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");`