Как отключить кеширование в jQuery Mobile UI
Попробовал...
<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 только кеширование. Должен быть лучший способ, хотя... я что-то упустил?
Спасибо,
Сергей
Ответы
Ответ 1
Спасибо за ответы, ребята, и хотя они не совсем работали для меня, они указали мне в направлении поиска кода, который я искал.
Это код, который я нашел у этого джентльмена Гитуба Гиста.
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 есть код кнопки с обратной связью, но мне кажется, что он не нужен, потому что моя кнопка возврата работает нормально...
Ответ 2
Вы пытались перезаписать значение по умолчанию?
$(document).bind("mobileinit", function(){
$.mobile.page.prototype.options.domCache = false;
});
Это работает для меня
Ответ 3
В jQM RC1 по умолчанию отключено кэширование. См. Выдержку ниже с сайта jQM о кешировании страниц: http://jquerymobile.com/demos/1.0rc1/docs/pages/page-cache.html
Если вы предпочитаете, вы можете сообщить jQuery Mobile о сохранении ранее посещаемых страниц в DOM вместо их удаления. Это позволяет вам кэшировать страницы, чтобы они были доступны мгновенно, если пользователь вернется к ним.
Чтобы сохранить все ранее посещаемые страницы в 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 и тщательно протестировать его на нескольких устройствах.
Ответ 4
Метод 1
Это отключает AJAX
Читать
http://jquerymobile.com/demos/1.0a2/#docs/api/globalconfig.html
Установите ajaxLinksEnabled
в false, и он не будет загружать и кэшировать эти страницы, просто работать как обычные ссылки.
Метод 2
Вторая идея - удалить кешированные элементы. Вы можете привязываться к событию pagehide
и вместо этого удалять страницу. Если в DOM нет, страница будет загружена снова.
Это можно сделать с помощью этого кода в качестве доказательства концепции:
$('.ui-page').live('pagehide',function(){ $(this).remove(); });
Но для этого нужна небольшая работа. Вышеприведенный код разбивает историю. Он предполагает, что вы сможете использовать его только со страницами, которые вы собираетесь оставить в дереве Sitemap. Поэтому вам нужно создать для них специальный селектор или привязать его только к определенным страницам.
Также вы можете привязываться к событию с кнопкой или mousedown, получать его href, генерировать идентификатор страницы из него и находить div по id, чтобы удалить его, прежде чем jqm попытается найти его.
Я не нашел способ отключить кеш или принудительно загрузить.
Ответ 5
Ответ Мартина должен быть правильным, по моему мнению, но 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();
}
});
Ответ 6
Здесь мое рабочее решение:
$('.selector').live( 'pagebeforecreate', function () {
$.mobile.urlHistory.stack = [];
$.mobile.urlstack = [];
$( '.ui-page' ).not( '.ui-page-active' ).remove();
});
Я написал (оригинал на немецком) статью об этой теме, может быть, это помогает.
Ссылка на статью, переведенную Google