jQuery теряет данные XML при обновлении браузера - PullRequest
1 голос
/ 09 марта 2012

Я создал приложение с несколькими внутренними страницами, например:

<div id="states" data-role="page">
  <div data-role="header"> <a href="#" onClick="parent.history.back()" data-icon="back">Back</a>
    <h1>My List</h1>
  </div>
  <!-- /header -->
  <div data-role="content"></div>
  <!-- /content -->
  <div data-role="footer" data-position="fixed" data-id="myfooter">
    <div data-role="navbar">
      <ul>
        <li><a href="#" data-icon="gear">Option</a></li>
        <li><a href="#" data-icon="home">Home</a></li>
        <li><a href="#" data-icon="search">Search</a></li>
      </ul>
    </div>
    <!-- /navbar --> 
  </div>
  <!-- /footer --> 
</div>
<!-- /page -->

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

$(document).bind( "pagebeforechange", function( e, info ) {
    if ( typeof info.toPage === "string" ) {
        var u = $.mobile.path.parseUrl( info.toPage ),
            re = /^#.../;

        if ( u.hash.search(re) !== -1 ) {
            buildLists( u, info.options );
            e.preventDefault();
        }
    }
});

Проблема возникает, когда я перехожу на другую страницу и нажимаю обновить, мои данные возвращаются как неопределенные, и все моивызовы data.find (...) являются недействительными, что приводит к ошибкам.

У кого-нибудь была такая проблема?Как я могу убедиться, что мои данные либо а) сохранены, либо б) перезагружены.Я что-то упускаю?

Я изучил этот код , но это не так динамично, как мне требуется.Все мои списки заполнены через XML.

1 Ответ

1 голос
/ 10 марта 2012

Вы слушаете не то событие.pagebeforechange срабатывает при изменении хэша.Вы хотите изменить его, когда хэш изменился, например, когда браузер устанавливает его.Слушайте «hashchange».Я бы посоветовал научиться делать эти вещи без jQuery, потому что библиотеки просто скрывают реальную технологию.

Если это не сработает, откажитесь от jQuery (я ненавижу его никогда не использовать, и все мои сайты работают на всехустройства).Есть много других способов сделать это.Вот один из них: http://www.davidpirek.com/blog/on-hash-change-javascript-listener

...