2012-03-03 6 views
2

Я пытаюсь перемещаться по страницам в jQuery Mobile, и у меня возникают проблемы с динамически созданной страницей и загруженными ajax.Страница, переписанная в jQuery Mobile

У меня есть страница (page_2), из которого я динамически создать страницу (page_3) с помощью page3.appendTo($.mobile.pageContainer); и затем $.mobile.changePage(page3);. Он отлично работает, и я могу вернуться к page_2, выполнив $.mobile.changePage($("#page_2"));. Все идет нормально.

Проблема в том, что я прихожу в page_2 с другой страницы (например, page_1). В этом случае по какой-то причине page_2 исчезает с $.mobile.pageContainer при создании page_3 (тогда как page_1 остается). Это мешает мне вернуться с вновь созданной страницы до page_2, где она технически принадлежит.

Любая идея, почему? Есть ли способ предотвратить удаление page_2?

Вы можете попробовать его там: page_1 и page_2

Короче:
page_1 -> page_2 работы
page_1 -> page_2 -> page_3 работы
page_1 -> page_2 -> page_3 -> page_2 терпит неудачу
page_2 -> page_3 -> page_2 -> page_3 работы (однако многие петли вам нравится)

Большое спасибо за вашу помощь!

ответ

1

Вы можете установить атрибут data-dom-cache к true на <div data-role="page" id="page_2"> элемент (вторая страница), поэтому он не удаляется, как только это навигация от:

<div data-dom-cache="true" data-role="page" id="page_2"> 
    ... 
</div> 

Docs: http://jquerymobile.com/demos/1.1.0-rc.1/docs/api/data-attributes.html

Поведение jQuery Mobile по умолчанию - удалить любую псевдостраницу из DOM, которая была внесена AJAX после того, как пользователь переходит от нее. Поэтому, когда вы ссылаетесь на удаленные документы, используйте абсолютные ссылки, указывающие на URL-адрес документа, а не идентификатор его <div data-role="page">.

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

$.mobile.changePage($("#page_2")); 

Это может измениться на:

$.mobile.changePage('/page_2.html'); 

Если ссылки на страницы, как это, они будут по умолчанию быть удалены из DOM после того, как они будут перемещены от вас, идея состоит в том, что вы менее склонны к сбою браузера мобильного устройства, если в DOM есть минимальные страницы. Существует также вероятность того, что страница будет просто извлечена из кеша, поэтому в этом случае HTTP-запрос не будет сделан.

+0

Спасибо, это имеет большой смысл и исправляет мою проблему. Я буду осторожно прибегать к кешу data-dom, но он становится огромной помощью. Мой сайт организован вокруг страниц, которые требуют большой передачи данных и страниц, которые только что отображают данные. Я пытаюсь использовать последнюю динамику, чтобы избежать повторной передачи данных, но jQuery mobile для этого не очень естественен. –

1

Я предлагаю, используя jqm события для этого:

$("#page3link").click(function (e) { 
    e.stopImmediatePropagation(); 
    e.preventDefault(); 
    createPage3(); 
    return false; 
}); 

вам нужно сделать то же самое для возврата к кнопки 2 или ссылку можно просто ставить и ч реф = «# стр.2»

+0

Спасибо за ваш ответ. Ответ Джаспера определил мою проблему, и я теперь вполне понимаю логику. Я сохраню события jqm для более поздних;) –

Смежные вопросы