Динамические страницы с помощью jQuery Mobile

Я использую jQuery довольно долго и делаю первые шаги с помощью jQuery Mobile.

Я использую index.html как jQuery Mobile и дизайн своего приложения, которое вызывает контент из content.php(просмотр списка всех страниц) сразу после его загрузки.

Я использую page.php для шаблона содержимого страницы, который отображает содержимое в зависимости от переменной, например: page.php? ID = 01 page.php? ID = 02 page.php? id = 03... И так далее.

Я думал, что лучший способ перейти отсюда - это иметь две страницы jQm на index.html, одну для главной страницы приложения, и одну, которая динамически загружает контент из page.php? id = xx. Таким образом, мне не нужно загружать весь контент, как только мое приложение будет загружено.

Как это сделать? Как я могу заставить элементы списка списка перейти на следующую страницу и загрузить в нее нужный контент?

Ответ 1

Рабочий комментарий:

  • Создайте пустую страницу jqMobile (div с соответствующей ролью данных и id id = "dynamicPage" )

  • Получите свой идентификатор ссылки на меню и вставьте его в качестве атрибута title пустой страницы.

    $("#appMainMenu a").live("click", function(evt){
    var whatpageto = $(this).attr('id');
    $('#dynamicPage').attr('title', 'dpage-'+whatpageto); // the title would look like title="dpage-linksid"
});
  • Загружать данные следующим образом:
    $('#dynamicPage').bind('pageshow', function() {
        $('#dPage').html(''); // animate while we're loading data
        var whatpage = $(this).attr('title'); // get the page title we changed earlier
        var whatpage1 = whatpage.replace("dpage-", ''); // remove the 'dpage-' part from the title, and we have our id.
        var whatpage2 = 'path/to/pagewhereyourcontentis.html'; // where is the content coming from? url or path to file
        $.get(whatpage2, function(data) { // load content from external file
          $('#dynamicPage').html(data); // insert data to the jqMobile page (which is a div).
          $('#dynamicPage').page(); // Re-render the page otherwise the dynamic content is not styled.
        });
});

Надеюсь, это поможет. Вопросы?

Ответ 2

Просто создавайте ссылки с <a href="..., и это работает. JQM загружает их с помощью AJAX

Приложение, которое вы создаете с помощью JQM, должно работать в любом старом браузере без javascript. Остальное позаботится сам JQM.

[править]

Чтобы получить URL-адреса и поместить их в любом месте, вам нужно просто использовать обычный старый . load() или . get() из jquery arsenal и когда вы получите контент в div, который вам нужен -

устарело: используйте .page() из jquery mobile

текущий: вызов .trigger('create')

(это событие добавляет стили и элементы управления). Подробные инструкции приведены в моих FAQ: http://jquerymobiledictionary.pl/faq.html

Ответ 3

Вот что я решил решить для моей страницы

$("#masterList").empty();
var listItems = "";
$.each(data.Messages, function (i, item)
{
    listItems += "<li><div><a href='#messageData' onclick='$(" +   // Use a click handler to set the attr of detailPage div
             '"#detailPage").attr("detailId", "'+ item.Id +       // my JSON item has an ID
             '")' + "'>";                                         // note the crazy quoting

    listItems += "Test about the item</a></li>";

}
$("#masterList").append(listItems);

Для detailPage я использовал обработчик события showhow для извлечения объекта JSON с использованием идентификатора и загрузил элемент детали на основе идентификатора в атрибуте detailId - что-то вроде loadDetail ($ ( "# detailPage" ). attr ( "detailId" )), и моя функция loadDetail сделала все остальное.

К сожалению, это нарушит стратегию URL для jQuery mobile. Поскольку выбранный элемент хранится на самой странице - это нехорошо. Я попытаюсь использовать внешнюю ссылку, являющуюся HTML-страницей и передающую id как arg.

Ответ 4

enter image description here

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width,height=device-height,user-scalable=no,initial-scale=1.0"/>
<link rel="stylesheet"  href="jquery.mobile-1.0.1.css" /> 
<title> Hello World </title>

<script src="jquery.js"></script>
<script src="jquery.mobile-1.0.1.min.js"></script>

<script type="text/javascript">
$(document).ready(function(e) {

$('#omtList').html('<ul data-role="listview" data-split-icon="delete" data-split-theme="d"> <li><a href="index.html"><h3>Broken Bells</h3><p>Broken Bells</p></a><a href="lists-split-purchase.html" data-rel="dialog" data-transition="slideup">Purchase album </a></ul>').trigger('create');
    });
</script>
</head>

<body>
omt
<div>
    <div id="omtList">  


    </div><!--/content-primary -->  
</body>
</html>