невозможно загрузить динамический просмотр списка в jquery mobile - PullRequest
3 голосов
/ 01 января 2012

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

например,

Страница A.html имеет кнопку иСтраница B.html имеет вид списка

, когда я нажимаю кнопку, которая находится на внутренней странице A.html. B.html загружается, но список не отображается, и когда я снова обновляю B.html, затем загружается список.

Код страницы A, то есть index.html при нажатии на страницу поиска B, загружается

<div data-role="content">   
        <p>
               <a href="findme.html" id="findMeBtn" data-role="button" data-icon="delete">Find Me</a>
               <a href="index.html" data-role="button" data-icon="delete">Fingle Hunts Basic</a>
               <a href="index.html" data-role="button" data-icon="delete">Communicator</a>  

        </p>


        <p>
         <div id="action">
              <div id="loading-icon"></div>
              <div id="msg"></div>
         </div>
        </p>
</div><!-- /content -->

Код страницы B iefindme.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Find Me</title>
<link rel="stylesheet" type="text/css" href="style/jquery.mobile.css"/>
<link rel="stylesheet" type="text/css" href="style/main.css"/>

</head>

<body>
    <div data-role="page"  id="findme">
    <div data-role="header"  data-theme="b">
        <a href="index.html" data-icon="back">Back</a>
        <h1>VisitFingal</h1>

    </div><!-- /header -->
    <div data-role="content" >  
    <center>
    <div class="vf-nav-view vf-button-panel" >
        <div data-role="controlgroup" data-type="horizontal" data-fullscreen="true" >
            <a href="index.html" data-role="button" style="width:30%;" data-theme="b">List</a>
            <a href="index.html" data-role="button" style="width:30%;" data-theme="b">Map</a>
        </div>
    </div>
    </center>

    <div id="findMeListView">

    </div>


    </div><!-- End of FindMe Page -->
    <div data-role="page"  id="details">
         <div data-role="header"><h1>Details</h1></div>
        <div data-role="content"></div>
    </div>
    <div data-role="footer"  data-theme="b"  data-id="mainfoot" data-position="fixed">
    <div data-role="navbar">
        <ul>
            <li><a href="index.html" >Home</a></li>
            <li><a href="findme.html"  class="ui-btn-active ui-state-persist">Find Me</a></li>
            <li><a href="#">Communicatior</a></li>
            <li><a href="#">Like</a></li>
            <li><a href="#">Favourates</a></li>
        </ul>
    </div>

    </div><!-- /footer -->

    </div>
</body>
<script src="js/jquery-1.6.3.min.js" type="application/javascript"></script>
<script src="js/jquery.mobile.js"  type="application/javascript"></script>
<script type="application/javascript">

        $(document).bind( "pagebeforechange", function( e, data ) {



          $.getJSON('getData.php', function(data) {
                  var items = [];
                $page  = $("#findme");
                $content = $page.find("#findMeListView" );
                var listViewData='<ul data-role="listview" data-filter="true" data-inset="true" data-theme="c" >';
                for (var i=0; i <data.length;i++)                   
                {
                    listViewData += '<li><a href="details.html?id='+data[i].id+'"><img height="95" width="95" src="'+data[i].url+'" /><h3>'+data[i].name+'</h3></li>';

                }
                     listViewData+='</ul>';

                    $content.html(listViewData);
                    $content.find( ":jqmData(role=listview)" ).listview();



          });


        });

</script>
</html>

Ответы [ 3 ]

5 голосов
/ 01 января 2012

Когда вы используете такой многостраничный шаблон, JS будет игнорироваться при переходе со страницы A на страницу B. Это связано с тем, что JJuery Mobile AJAX-ссылка извлекает только первый элемент data-role="page с новой страницы и добавляет его к текущему DOM, как вы можете себе представить, это игнорирует любой код вне элемента data-role="page.

Два исправления:

  1. Поместите код JavaScript для page B непосредственно в элемент data-role="page, чтобы он был проанализирован, когда jQuery Mobile выполняет загрузку страницы AJAX.

  2. Поместите весь код для вашего сайта в один включаемый файл JS и включите его в <head> каждой страницы; таким образом, весь код для вашего сайта будет доступен, независимо от того, обновляет ли пользователь или делает глубокие ссылки на сайт, и когда он перемещается с помощью ссылок JQuery Mobile по AJAX. Это мой предпочтительный метод.

0 голосов
/ 06 мая 2012

Для тех из вас, кто хочет использовать прямой исходный код в своих приложениях, я создал бесплатный репозиторий с открытым исходным кодом на Github.

Обратите внимание, что в настоящее время используется JQM 1.1.0. Не стесняйтесь скачать, раскошелиться, использовать, скопировать код.

https://github.com/jaydeepw/jquerymobile-dynamic-listview

Ура!

0 голосов
/ 01 января 2012

Раньше у меня были проблемы с jQuery Mobile при загрузке новых страниц и некорректного запуска контента.В основном с отправкой форм и обращениями к базе данных.Я использовал дешевое исправление, поместив атрибут data-ajax = "false" на ссылку, загружающую страницу.Таким образом, он выполняет полный запрос HTTP вместо простого вызова ajax и загружает DOM и все.

Вот пример ..

<a href="findme.html" id="findMeBtn" data-role="button" data-icon="delete" data-ajax="false">Find Me</a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...