27

试过...

<div data-role="page" data-cache="30"> 
<div data-role="page" data-cache="never">
<div data-role="page" data-cache="false"> 
<div data-role="page" cache="false">

似乎没有任何效果...所以目前我正在通过...解决服务器端的问题

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

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

谢谢,

谢尔伊

4

6 回答 6

36

谢谢你们的答案,尽管他们对我不太有效,但他们确实为我指明了找到我正在寻找的代码的方向。

这是我在这位绅士的 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();
  };
});

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

于 2011-06-30T14:38:58.353 回答
5

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" 属性添加到页面的容器中:

<div data-role="page" id="cacheMe" data-dom-cache="true">

您还可以像这样以编程方式缓存页面:

pageContainerElement.page({ domCache: true });

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

于 2011-10-02T19:28:22.190 回答
5

您是否尝试过覆盖默认值?

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

这对我有用

于 2013-01-25T09:55:42.607 回答
4

方法一

这将禁用 AJAX

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

设置ajaxLinksEnabled为 false 并且它不会加载和缓存这些页面,就像普通链接一样工作。

方法二

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

可以使用此代码作为概念证明来完成:

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

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

您还可以绑定到按钮的 click 或 mousedown 事件,获取其 href,从中生成页面 id,并在 jqm 尝试查找之前通过 id 找到 div 以将其删除。

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

于 2011-01-12T07:37:50.127 回答
2

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();
    }
});
于 2012-11-26T04:45:29.500 回答
1

这是我的工作解决方案:

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

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

于 2011-06-26T10:31:46.570 回答