2013-06-10 1 views
2

Я начинаю использовать jQuery Mobile, и есть поведение, которое вызывает у меня много сомнений, в основном связанных с использованием идентификаторов для элементов.Почему jQuery Mobile всегда сохраняет «оригинальную» страницу, загруженную в DOM?

На моей странице есть меню слева (панель с уникальным идентификатором, как говорят документы), а затем заголовок/контент/и т. Д., Все внутри раздела «страница».

Когда я перехожу на другую страницу, jQuery сохраняет «оригинальную» страницу div, загруженную сначала страницей, в DOM. Если я продолжаю навигацию, другие страницы, загруженные в DOM, уходят, он всегда сохраняет «активную» страницу и «оригинальную».

  • Зачем он загружает оригинал?
  • Могу ли я избежать этого? (для целей кэширования)
  • Разве это не делает мой идентификатор (особенно тот, который используется для моего меню) не уникальным, который, как правило, нахмурился?

Спасибо!
Daniel

+0

Что сказал KevinB правильно. Динамически вы можете '$ .mobile.activePage.find ('. Selector')' идентифицировать свою цель. Кроме того, вы можете создавать/удалять страницы динамически и сохранять неповрежденную домашнюю страницу. – Omar

ответ

0

Оригинал хранится в DOM как для кэширования, так и для переходов. Многие из выполняемых переходов невозможны без одновременной загрузки обеих страниц. Это может также привести к значительной задержке в середине перехода, если они не загружаются одновременно во время перехода.

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

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

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

+0

Что я заметил, так это то, что когда у меня есть переход (большинство страниц этого не делают, но некоторые делают), тогда «оригинальная», «активная» и «новая» страница (всего 3) есть для продолжительность анимации. Как только анимация закончена, исчезает ту, которая была «активной», но «оригинал» существует навсегда. –

+0

Что касается не использования идентификаторов, то в документации для панели явно указано, что панель должна иметь уникальный идентификатор, поэтому я спрашиваю, я не уверен, следует ли указывать идентификатор, который столкнется или не даст его один, не уверен, какой из них «хуже» –

+0

К сожалению, манипулирование панелями динамически с помощью '.class' не работает, но с' # id' они делают. не спрашивайте меня, почему, я пробовал это раньше, и это не хахаха. Но пока вы используете селектор '$ .mobile.activePage', чтобы найти свою цель, все должно работать нормально. – Omar

0

Чтобы удалить первую страницу из DOM, я использую это:

$(document).one('pageshow', "div:jqmData(role='page')", function(event, ui){ 
    $(ui.prevPage).remove(); 
}); 

Я не знаю, если это рекомендовано в дэвах jQM, но она хорошо работает и решить проблему с другой библиотекой, которая не удалось повторно инициализировать при переходе на первую страницу.

0

Вот фрагмент кода, который удалит страницы из DOM после прохода.

$('[data-role="page"]').live('pagehide', function() { 
    $(this).remove(); 
}); 

Как уже говорили другие, чтобы выбрать элемент с PageId, вы должны принять во внимание, что текущая активная страница, которая может быть сложно, если смотреть на «следующей» активной страницы. Например, при попытке обработать что-либо в pageinit, jquery не вернет эту страницу в качестве активной страницы. Вы можете сделать что-то подобное, чтобы получить его.

$(':data(role="page")').live('pageinit', function() { 
    var currentPage = $(this); 
    ........ 
}); 
Смежные вопросы