остановить jQuery Mobile от кеширования динамической страницы - PullRequest
2 голосов
/ 04 августа 2011

В jQuery mobile я использую динамический шаблон страницы со вставленным пользовательским содержимым в зависимости от ввода пользователя.

Все работает, но как только страница создается, она кешируется и не отображаетновые значения, если вы вернетесь и сделаете новый выбор.Я попытался применить следующее исправление:

$('#instrument').bind('pagehide', function(){
  $(this).remove();
});

, которое удаляет страницу, но если вы попытаетесь вернуться на эту страницу, она не будет повторно инициализирована, и я просто буду продолжать отодвигатьсяв начало моего приложения.

Динамический контент должен быть добавлен на страницу с помощью pagebeforecreate (реальный HTML не кажется важным, поэтому я не буду включать его здесь), иначе он выиграл 'т быть отформатированным.Если я использую pagebeforeshow, контент не будет отформатирован, но он изменится, если вы вернетесь и сделаете новый выбор.

Я понимаю, что pagebeforecreate будет кэшировать страницу, но она не появляетсячто я могу использовать любой другой метод из-за того, что содержимое не форматируется: (

Я не могу на всю жизнь найти решение!

Ответы [ 3 ]

5 голосов
/ 04 августа 2011

Попробуйте использовать pagebeforeshow, но при показе страницы, чтобы исправить все форматирование, вызовите page().

Примерно так:

$('#instrument').bind('pagebeforeshow', function() {
  // Do your content insertion
});

$('#instrument').bind('pageshow', function() {
  $(this).page();
});

Вы можете обнаружить, что это только "половина "работает (не обновляет форматирование при обновлении страницы), в этом случае вы можете попробовать этот трюк : завернуть страницу во временный элемент и вызвать page() в оболочке.

$('#instrument').bind('pageshow', function() {
  $(this).wrap('<div id="temporary-instrument-wrapper">');
  $('#temporary-instrument-wrapper').page();
  $(this).unwrap();
});
1 голос
/ 04 августа 2011

Новая функция управления кэш-памятью DOM: по умолчанию включена

Поскольку для перехода по анимированной странице требуется, чтобы страницавы находитесь, и тот, к которому вы переходите, находится в DOM, мы добавляем страницы в DOM, когда вы перемещаетесь.До сих пор эти страницы оставались в DOM до тех пор, пока вы не выполнили полное обновление страницы, поэтому всегда возникало опасение, что мы можем достичь потолка памяти на некоторых устройствах и вызвать замедление работы браузера или даже его сбой.

Для бета-версии 2 мы добавили простой механизм для поддержания чистоты DOM.Это работает так: всякий раз, когда страница загружается через Ajax, она помечается для удаления из DOM, когда вы переходите на другую страницу (технически, на шкуре страницы).Если вы вернетесь на удаленную страницу, браузер сможет извлечь файл из своего кэша или при необходимости повторно запросит его у сервера.В случае вложенных списков мы удаляем все страницы, которые составляют вложенный список, после перехода на страницу, которая не является частью списка.Страницы, включенные в многостраничную настройку, не будут затронуты этой функцией вообще - jQuery Mobile управляет только страницами, внесенными Ajax.

Новая опция страницы, называемая domCache, определяет, следует лиоставьте страницы в DOM как способ их кеширования (как обычно) или сохраните DOM в чистоте и удалите скрытые страницы (по-новому).По умолчанию для domCache установлено значение false, что позволяет активно управлять размером DOM.Если для этого параметра установлено значение true, вам нужно позаботиться о том, чтобы самостоятельно управлять DOM и тщательно тестировать на нескольких устройствах.

Чтобы установить параметр domCache на отдельных страницах для выборочного кэширования страницы, выМожно либо добавить атрибут data-dom-cache = "true" в контейнер страницы, либо установить его программно следующим образом:

elem.page({ domCache: true });

Параметр domCache также можно установить глобально.Вот как можно снова включить кеширование DOM, чтобы оно работало так, как оно было изначально:

$.mobile.page.prototype.options.domCache = true;
0 голосов
/ 11 июня 2012

Я исправил эту проблему с помощью этого простого решения:

Добавьте еще один параметр со значением random к вашему URL, например http://www.yourdomain.com/ws.php?opcion=1&**cache_hack=" +Math.random();**

Последний параметр сслучайный вызов вызывает «diferente» вызов, и jquery mobile не кешируется .-

Также добавьте в ваш php-скрипт:

`header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
 header("Cache-Control: no-cache");
 header("Pragma: no-cache");`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...