如何在jQuery Mobile UI中禁用缓存

试了…

没有什么可以工作……所以目前我正在修复服务器端的问题…

 .'?x='.rand() .'&x='.rand() 

我不想仅仅缓存禁用AJAX。 必须有更好的方法……我错过了什么吗?

谢谢,

谢尔盖·

谢谢你们的答案,即使他们不适合我,他们确实指出了我找到我正在寻找的代码的方向。

这是我在这位绅士的Github Gist上找到的代码。

https://gist.github.com/921920

 jQuery('div').live('pagehide', function(event, ui){ var page = jQuery(event.target); if(page.attr('data-cache') == 'never'){ page.remove(); }; }); 

在Gist中还有一个后退按钮代码,但我似乎并不需要它,因为我的后退按钮似乎工作得很好……

您是否尝试覆盖默认值?

 $(document).bind("mobileinit", function(){ $.mobile.page.prototype.options.domCache = false; }); 

这对我有用

现在,jQM RC1中的页面缓存现已关闭。 请参阅jQM网站上有关页面缓存的摘录: http : //jquerymobile.com/demos/1.0rc1/docs/pages/page-cache.html

如果您愿意,可以告诉jQuery Mobile将以前访问过的页面保留在DOM中,而不是删除它们。 这使您可以缓存页面,以便在用户返回时立即可用。

要将所有以前访问过的页面保留在DOM中,请将页面插件上的domCache选项设置为true,如下所示:

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

或者,要仅缓存特定页面,可以将data-dom-cache =“true”属性添加到页面的容器中:

您还可以以编程方式缓存页面,如下所示:

pageContainerElement.page({ domCache: true });

DOM缓存的缺点是DOM会变得非常大,导致某些设备出现速度减慢和内存问题。 如果启用DOM缓存,请注意自己管理DOM并在一系列设备上进行彻底测试。

方法1

这会禁用AJAX

阅读http://jquerymobile.com/demos/1.0a2/#docs/api/globalconfig.html

ajaxLinksEnabled设置为false,它将不会加载和缓存这些页面,只是作为普通链接工作。

方法2

第二个想法是删除缓存的元素。 您可以绑定到pagehide事件并使其删除页面。 如果DOM中不存在,则将再次加载该页面。

可以使用此代码作为概念certificate:

 $('.ui-page').live('pagehide',function(){ $(this).remove(); }); 

但它需要一点工作。 上面的代码打破了历史。 它certificate您只能将它用于您打算在站点地图树中留下的页面。 因此,您必须为它们创建一个特殊选择器或将其绑定到仅某些页面。

你也可以绑定到一个按钮的click或mousedown事件,获取它的href,从中生成页面id并在jqm尝试查找之前找到div by id以将其删除。

我没有找到禁用缓存或强制加载的建议方法。

在我看来,Martin的答案应该是正确的,但jQuery Mobile无论如何都会缓存第一页。 https://github.com/jquery/jquery-mobile/issues/3249

我选择“修补” $.mobile.page.prototype.options.domCache = falsedata-dom-cache="true"

 $(document).on('pagehide', function (e) { var page = $(e.target); if (!$.mobile.page.prototype.options.domCache && (!page.attr('data-dom-cache') || page.attr('data-dom-cache') == "false") ) { page.remove(); } }); 

这是我的工作解决方案:

 $('.selector').live( 'pagebeforecreate', function () { $.mobile.urlHistory.stack = []; $.mobile.urlstack = []; $( '.ui-page' ).not( '.ui-page-active' ).remove(); }); 

我写了一篇关于该主题的(德语原文)文章,也许这有帮助。 链接到谷歌翻译的文章