¿Cómo se desactiva el almacenamiento en caching en la interfaz de usuario mobile de jQuery?

Intentó…

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

Nada parece funcionar … así que en este momento estoy arreglando el problema en el lado del server a través de …

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

No quiero desactivar el AJAX solo el almacenamiento en caching. Sin embargo, tiene que haber una mejor manera … ¿me estoy perdiendo algo?

Gracias,

Serhiy

Gracias por las respuestas chicos, y aunque no funcionaron para mí, me indicaron el código que estaba buscando.

Este es el código que encontré en Github Gist de este caballero.

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

También hay un código de button de retroceso en ese Gist, pero parece que no lo necesito porque el button de mi espalda parece funcionar bien …

¿Has intentado sobrescribir el valor pnetworkingeterminado?

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

Esto funciona para mí

El almacenamiento en caching de la página ahora está desactivado por defecto en jQM RC1. Consulte el extracto a continuación del website de jQM sobre el almacenamiento en caching de la página: http://jquerymobile.com/demos/1.0rc1/docs/pages/page-cache.html

Si lo prefiere, puede indicar a jQuery Mobile que mantenga páginas visitadas previamente en el DOM en lugar de eliminarlas. Esto le permite almacenar en la memory caching las páginas para que estén disponibles al instante si el usuario regresa a ellas.

Para mantener todas las páginas visitadas previamente en el DOM, configure la opción domCache en el complemento de la página como verdadera, como esta:

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

Alternativamente, para almacenar en caching solo una página en particular, puede agregar el atributo data-dom-cache = "true" al contenedor de la página:

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

También puede almacenar en caching una página mediante progtwigción de esta manera:

pageContainerElement.page({ domCache: true });

El inconveniente del almacenamiento en memory caching de DOM es que el DOM puede ser muy grande, lo que provoca ralentizaciones y problemas de memory en algunos dispositivos. Si habilita el almacenamiento en memory caching DOM, tenga cuidado de administrar el DOM usted mismo y realice testings exhaustivas en una variedad de dispositivos.

Método 1

Esto deshabilita AJAX

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

Establezca ajaxLinksEnabled en falso y no cargará y almacenará esas páginas en caching, solo funcionará como enlaces normales.

Método 2

La segunda idea es eliminar los elementos almacenados en caching. Puede vincular al evento pagehide y hacer que elimine la página. Si no está presente en DOM, la página se cargará nuevamente.

Se puede hacer con este código como una testing de concepto:

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

Pero necesita un poco de trabajo. El código anterior rompe la historia. Parece que solo podrá usarlo con las páginas que pretenda dejar en su tree de map del sitio. Por lo tanto, debe crear un selector especial para ellos o vincularlo solo a determinadas páginas.

También puede vincularse al evento de clic o mousedown de un button, get su href, generar id de página fuera de él y encontrar el div por id para eliminarlo antes de que jqm intente searchlo.

No he encontrado ninguna forma recomendada de deshabilitar la memory caching o forzar la carga.

La respuesta de Martin debería ser la correcta en mi opinión, pero jQuery Mobile almacena en caching la primera página sin importar nada. https://github.com/jquery/jquery-mobile/issues/3249

He optado por "parchar" el comportamiento de $.mobile.page.prototype.options.domCache = false y 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(); } }); 

Aquí está mi solución de trabajo:

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

Escribí un artículo (original en alemán) sobre ese tema, tal vez eso ayude. Enlace al artículo traducido de google