Передача параметров на идентификатор страницы в jQuery Mobile
Я пытаюсь передать некоторые параметры id страницы, сделанные в jQuery Mobile.
Сайт состоит из списков-представлений со ссылками, каждый из которых имеет в себе хэш-код, например:
<li><a href="#pronostico?region=12&ciudad=0">Puerto Natales</a></li>
Я привязал pagebeforechange
, чтобы поймать хэши в URL-адресе, выполнить обнаружение параметров и принять меры в зависимости от количества переданных параметров.
Теперь, с помощью файлов cookie, я пробовал это:
$(document).one("pageinit", function(event, data) {
if (location.hash.search(/^(#ciudades|#pronostico)/) === -1) {
if ($.cookie("recordar")) {
$.mobile.changePage($("#pronostico"), {
data: "region=" + $.cookie("region") + "&ciudad=" + $.cookie("ciudad")
});
}
}
});
Но он просто передает меня к идентификатору страницы #pronostico
, без параметров в хэше. В результате я получаю страницу без информации, которую она должна показывать.
Спасибо заранее.
Ответы
Ответ 1
Да, параметры хэша не поддерживаются по умолчанию. Я использовал следующий плагин, чтобы дать мне это, и он работает очень хорошо до сих пор; -)
jqm.page.params
ОБНОВЛЕНИЕ - КАК ИСПОЛЬЗОВАТЬ:
Я добавил следующий код после включения jqm.page.params.js:
$(document).bind("pagebeforechange", function( event, data ) {
$.mobile.pageData = (data && data.options && data.options.pageData)
? data.options.pageData
: null;
});
Итак, например, вызываемая страница называется like: index.html # search? id = mysearchkeyword
Теперь я могу получить доступ к этой информации в ЛЮБОЙ странице события, которое мне нравится:
$(document).on("pagebeforeshow", "#firstpage", function(e, data){
if ($.mobile.pageData && $.mobile.pageData.id){
console.log("Parameter id=" + $.mobile.pageData.id);
}
});
Выведет "mysearchkeyword" на консоль регистрации.
Надеюсь, это поможет!
PS: Заметим, что я никак не связан с плагином или автором
Примечание редактора: У автора было это как второй блок кода. В JQuery 1.9 live удаляется, поэтому я обновил его пример выше с синтаксисом .on. Вот оригинал:
$("#firstpage").live("pagebeforeshow", function(e, data){
if ($.mobile.pageData && $.mobile.pageData.id){
console.log("Parameter id=" + $.mobile.pageData.id);
}
});
Ответ 2
Однако плагин не поддерживает закладок. Если вы добавите обработчик изменения страницы, вы можете исправить это, поместив params обратно на url после завершения jQM с ним:
// list of inner pages where you want to support params AND bookmarking
// maybe better to use a CSS class name to mark them
var $paramPages;
$(document).ready(function() {
$paramPages = $('#book, #order');
});
// put the params back into the location once jQM is done
//
$( document ).bind( "pagechange", function( e, data ) {
if (data.toPage.is($paramPages) && data.absUrl) {
window.location.replace(data.absUrl);
}
});
Ответ 3
Похоже, что одним из способов достижения параметров URL-адреса между страницами является использование подхода хэш-обработки в этом примере из документов jQuery Mobile:
http://demos.jquerymobile.com/1.4.1/navigation-hash-processing/
Это решение кажется идеальным, потому что, в отличие от других решений, оно обновляет URL-адрес в адресной строке браузера, чтобы включить параметры URL-адреса при изменении между страницами. Этот подход также устраняет необходимость использования любых плагинов, таких как "jqm.page.params".