Question

J'ai essayé ...

<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 seemes au travail ... donc au moment où je suis régler le problème sur le côté serveur via ...

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

Je ne veux pas désactiver l'AJAX simplement la mise en cache. Il doit y avoir une meilleure façon si ... suis-je manque quelque chose?

Merci,

Serhiy

Était-ce utile?

La solution

Merci pour les réponses les gars, et même si ils ne l'ont pas tout à fait le travail pour moi, ils me ont fait le point dans le sens de trouver le code que je cherchais.

Voici le code que j'ai trouvé sur Github Contenu essentiel de ce monsieur.

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 avoir besoin vraiment que mon bouton de retour semble fonctionner très bien ...

Autres conseils

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

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

Cela fonctionne pour moi

cache la page est maintenant désactivée par défaut dans JQM RC1. Voir l'extrait ci-dessous du site JQM à propos de 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 conserver les pages précédemment visitées dans les DOM au lieu de les supprimer. Cela vous permet de mettre en cache les pages afin qu'ils soient disponibles instantanément si l'utilisateur retourne à eux.

     

Pour conserver toutes les pages précédemment visitées dans les DOM, définissez l'option domCache sur le plug-in page true, comme ceci:

     

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

     

Vous pouvez également mettre en cache juste une page particulière, vous pouvez ajouter les données-dom-cache = "true" au conteneur de la page:

     

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

     

Vous pouvez également mettre en cache une page programme comme celui-ci:

     

pageContainerElement.page({ domCache: true });

     

L'inconvénient de la mise en cache DOM est que le DOM peut devenir très grand, ce qui entraîne des ralentissements et des problèmes de mémoire sur certains appareils. Si vous activez la mise en cache des DOM, prendre soin de gérer les DOM-vous et de tester à fond sur une gamme d'appareils.

Méthode 1

Cela désactive AJAX

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

Set ajaxLinksEnabled false et il ne se charge pas et mettre en cache les pages, tout travail comme des liens normaux.

Méthode 2

Deuxième idée est de supprimer des éléments mises en cache. Vous pouvez lier à l'événement de pagehide et faire supprimer la page au lieu. Dans le cas contraire présent dans DOM, la page sera chargée à nouveau.

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 brise l'histoire. Il prooves que vous ne pourrez l'utiliser avec des pages que vous souhaitez être feuilles dans votre arbre de plan du site. Par conséquent, vous devez créer un sélecteur spécial pour eux ou se lier à certaines pages seulement.

Vous pouvez aussi lier au clic ou d'un événement mouseDown d'un bouton, obtenir son href, générer id page sur et trouver le div id par l'enlever avant JQM tente de le chercher.

J'ai trouvé moyen pas avisé de désactiver le cache ou de forcer le chargement.

La réponse de Martin devrait être la bonne à mon avis, mais jQuery Mobile cache la première page, peu importe quoi. https://github.com/jquery/jquery-mobile/issues/3249

J'ai choisi de "patch" le comportement de $.mobile.page.prototype.options.domCache = false et 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();
    }
});

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 (original en allemand) article sur ce sujet, peut-être cela aide. Lien vers google article traduit

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top