27 votes

Comment désactiver la mise en cache dans jQuery Mobile UI

A tenté...

 <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">
 

Rien ne semble fonctionner ... donc pour le moment je corrige le problème côté serveur via ...

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

Je ne veux pas désactiver l'AJAX juste la mise en cache. Mais il doit y avoir un meilleur moyen ... manque-t-il quelque chose?

Merci,

Serhiy

36voto

Serhiy Points 1154

Merci pour les réponses, les gars, et même s'ils ne fonctionnaient pas tout à fait pour moi, ils m'ont indiqué la direction pour trouver le code que je cherchais.

Voici le code que j'ai trouvé sur le Github Gist de ce gentleman.

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

Il y a aussi un code de bouton de retour dans ce Gist, mais je ne semble pas vraiment en avoir besoin car mon bouton de retour semble très bien fonctionner ...

6voto

ludwig Points 141

Avez-vous essayé d'écraser la valeur par défaut?

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

Ça marche pour moi

5voto

Martin Points 4034

Page mise en cache est maintenant désactivé par défaut dans jQM RC1. Voir l'extrait ci-dessous de la jQM site web sur la page mise en cache: http://jquerymobile.com/demos/1.0rc1/docs/pages/page-cache.html

Si vous préférez, vous pouvez dire à jQuery Mobile pour garder précédemment-les pages visitées dans les DOM au lieu de les enlever. Cela vous permet de mettre en cache les pages pour qu'elles soient disponibles à l'instant si l'utilisateur retourne sur eux.

Pour garder toutes les déjà les pages visitées dans les DOM, ensemble la domCache option sur la page du plugin pour vrai, comme ceci:

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

Sinon, pour cache juste une page en particulier, vous pouvez ajouter les données-dom-cache=attribut"vrai" à la page du conteneur:

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

Vous pouvez également mettre en cache une page par programme comme ceci:

pageContainerElement.page({ domCache: true });

L'inconvénient de DOM la mise en cache, c'est que les DOM peuvent devenir très grandes, entraînant des ralentissements et des problèmes de mémoire sur certains appareils. Si vous activez DOM la mise en cache, prenez soin de gérer les DOM-vous et de tester de manière approfondie sur une large gamme d'appareils.

4voto

naugtur Points 12383

Méthode 1

Cela désactive l'AJAX

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

Ensemble ajaxLinksEnabled de faux et il ne charge pas et cache ces pages, juste travailler comme d'habitude liens.

Méthode 2

Deuxième idée est de supprimer les éléments mis en cache. Vous pouvez lier pagehide événement et d'en faire supprimer la page. Si non présent dans les DOM, la page sera de nouveau chargé.

Il peut être fait avec ce code comme une preuve de concept:

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

Mais il a besoin d'un peu de travail. Le code ci-dessus des sauts de l'histoire. Il prouve que vous ne serez capable de l'utiliser avec les pages que vous avez l'intention d'être des feuilles dans votre sitemap arbre. Par conséquent, vous devez créer un sélecteur pour eux ou de les lier à certaines pages.

Aussi, vous pouvez lier à un click du bouton ou de l'événement mousedown, obtenir ses href, générer l'id de la page en sortir et de trouver la div d'id de l'enlever avant de jqm essaie de regarder pour cela.

Je n'ai trouvé aucune conseillé façon de désactiver le cache ou de forcer le chargement.

1voto

Sebastian Sauer Points 11

Voici ma solution de travail:

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

J'ai écrit un article (original en allemand) sur ce sujet, peut-être que cela aide. Lien vers l'article traduit par google

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X