JQuery Mobile: использование data-rel="back" с динамическим генерированием страниц
У меня проблема с перемещением назад по стеку истории в моем мобильном приложении jquery.
По сути, у меня есть три страницы:
- форма поиска (предварительно встроенный div с ролью страницы. ограниченная навигация: только к странице списка результатов)
- список результатов (встроенный div с ролью страницы, информация о результатах добавлена через ajax. Навигация возможна на любую страницу записи)
- страница записи (полностью динамически создается. Неограниченные возможности навигации по соответствующим страницам записи)
Страницы записей создаются динамически на основе таблицы и идентификатора записи, добавляемых в тело документа каждый раз, когда выбирается новая запись.
var page_id = table + record_id;
var pg_html = newPageHTML(page_id );
$('body').append(pg_html);
$.mobile.changePage($("#" + page_id));
после перехода к записи и нажатия кнопки "назад" (data-rel="back") ожидаемое поведение будет состоять в том, чтобы вернуться на предыдущую страницу, будь то другая запись или список результатов, но я отослан полностью вернуться к форме поиска. Это происходит, когда я использую data-dom-cache="true", а когда нет.
Любое объяснение, почему это будет? Спасибо за помощь.
2 ответа
Получить идентификатор предыдущей страницы в DOM и перейти к ней.
$('.selector').on('click', function() {
// get the ID of the previous page
var previous = '#' + $.mobile.activePage.prev('div[data-role="page"]')[0].id;
// move to previous page with reverse effect
$.mobile.changePage(previous, {
transition: 'slide',
reverse: true
});
});
Хорошо, хорошо, вот как я это исправил. Хотя я не выберу это как ответ, потому что это так далеко от того, как я хотел, чтобы это работало, и кажется очень запутанным.
Проблемы:
- Невозможно сохранить любые изменения страницы в истории, которые не указывали на настоящую HTML-страницу. Таким образом, подпрыгивание между динамическими страницами отсутствовало.
- Мне нужен был способ передать мои данные на страницу.html, которая останется в истории, поэтому я пошел с сериализованной строкой в URL, например, строкой GET. Аналогично здесь, но другой, более короткий, более чистый, на который я не могу найти ссылку - Извините! ( Как я могу получить значения строки запроса в JavaScript?)
- Страницы.html должны были быть разными и обмениваться между собой, чтобы страница перезагрузилась и запустила прослушиватели событий изменения страницы.
Теперь HTML-страницы хранятся и содержат всю информацию, необходимую для перерисовки при нажатии назад.
код для #2 (не мой, большое спасибо тому, кто написал):
$.urlParam = function(name){
var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
return results[1] || 0;
}
код для № 3:
// change page
if($('.ui-page-active').attr('id') == "record-a"){
$.mobile.changePage("p-record-b.html?table=" + content_type + "&id=" + record_id);
}else if($('.ui-page-active').attr('id') == "record-b"){
$.mobile.changePage("p-record-a.html?table=" + content_type + "&id=" + record_id);
}else{
$.mobile.changePage("p-record-a.html?table=" + content_type + "&id=" + record_id);
}