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を無効にしたくありません。しかし、もっと良い方法が必要です...私は何かが足りないのですか?

ありがとう、

Serhiy

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();
  };
});

そのGistには戻るボタンのコードもありますが、戻るボタンがうまく機能しているように見えるので、実際には必要ないようです...

于 2011-06-30T14:38:58.353 に答える
5

デフォルト値を上書きしようとしましたか?

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

これは私のために働く

于 2013-01-25T09:55:42.607 に答える
5

jQM RC1 では、ページ キャッシングがデフォルトでオフになりました。ページ キャッシングに関する jQM Web サイトからの以下の抜粋を参照してください

必要に応じて、以前にアクセスしたページを削除するのではなく、DOM に保持するように jQuery Mobile に指示できます。これにより、ページをキャッシュして、ユーザーがページに戻ったときにすぐに利用できるようにすることができます。

以前にアクセスしたすべてのページを 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 に答える
4

方法1

これによりAJAXが無効になります

http://jquerymobile.com/demos/1.0a2/#docs/api/globalconfig.htmlを読む

falseに設定ajaxLinksEnabledすると、それらのページはロードおよびキャッシュされず、通常のリンクとして機能します。

方法2

2番目のアイデアは、キャッシュされた要素を削除することです。イベントにバインドしてpagehide、代わりにページを削除することができます。DOMに存在しない場合、ページは再度ロードされます。

これは、概念実証としてこのコードを使用して実行できます。

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

しかし、少し作業が必要です。上記のコードは履歴を壊します。サイトマップツリーに残す予定のページでのみ使用できることを証明します。したがって、それらのために特別なセレクターを作成するか、特定のページのみにバインドする必要があります。

また、ボタンのクリックイベントまたはマウスダウンイベントにバインドし、そのhrefを取得し、そこからページIDを生成し、idでdivを見つけて、jqmが検索する前に削除することもできます。

キャッシュを無効にしたり、ロードを強制したりするためのアドバイスされた方法は見つかりませんでした。

于 2011-01-12T07:37:50.127 に答える
2

私の意見ではMartinの答えは正しいはずですが、jQuery Mobileは何があっても最初のページをキャッシュします。https://github.com/jquery/jquery-mobile/issues/3249

$.mobile.page.prototype.options.domCache = falseとの動作に「パッチを当てる」ことを選択しましたdata-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 に答える