jQuery Mobile学习笔记(六)——jQuery Mobile API

页面部分的介绍基本结束。有了框架之后,我们要考虑的页面中的数据通信和交互。jQuery Mobile(JQM)使用了JavaScript与框架通信以及进行内容管理的API。

1.文档事件

  1. (document).bind('mobileinit',&nbsp;function()&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Initialization&nbsp;code&nbsp;here&nbsp;&nbsp;</span></li><li class="alt"><span>});&nbsp;&nbsp;</span></li></ol></div><pre name="code" class="html" style="display: none;">(document).bind(‘mobileinit’, function() { // Initialization code here });mobileinit事件会在jQueryMobile框架载入内存之后,UI元素被渲染之前触发,可以使用它来改变一些UI全局选项。

    JQM文档事件的执行顺序通常是:mobileinit - ready - load

    放置位置:jQuery.js之后,jQueryMobile.js之前。

    1. <head>  
    2.        <meta charset=“utf-8” />  
    3.        <title>My first jQuery Mobile code</title>  
    4.        <link rel=“stylesheet” href=“http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.css” />  
    5.        <script src=“http://code.jquery.com/jquery-1.6.4.min.js”></script>  
    6.     <script>$(document).bind(<span style=“background-color: rgb(51, 204, 255);”>“mobileinit”</span>, function() {  
    7.        // Our initialization code here  
    8.     });  
    9.     <script>  
    10.     <script src=“http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.js”></script>  
    11.        <!– CUSTOM INITIALIZATION CODE –>  
    12.        <script src=“customcode.js”></script>  
    13.        <meta name=“viewport” content=“width=device-width, initial-scale=1”>  
    14.  </head>  
     <head>
            <meta charset="utf-8" />
            <title>My first jQuery Mobile code</title>
            <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.css" />
            <script src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
            <script>$(document).bind(<span style="background-color: rgb(51, 204, 255);">"mobileinit"</span>, function() {
            // Our initialization code here
            });
            <script>
            <script src="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.js"></script>
            <!-- CUSTOM INITIALIZATION CODE -->
            <script src="customcode.js"></script>
            <meta name="viewport" content="width=device-width, initial-scale=1">
      </head>

    2.配置( .mobilejQuery

    .mobile.&lt;widget_name&gt;.prototype用于访问相应的原型。例如.mobile.page.prototype.options可用于定义应用到每个页面实例(data-role=”page”)的默认属性。这些设置全局或部件默认属性的设置要放在mobileinit事件中。

    2.1全局配置

    用户界面配置:

    1. (document).bind("mobileinit",&nbsp;function()&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;We&nbsp;change&nbsp;default&nbsp;values&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$<span class="attribute">.mobile.defaultPageTransition</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"fade"</span><span>;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$<span class="attribute">.mobile.minScrollBack</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">150</span><span>;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$<span class="attribute">.mobile.activeBtnClass</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"active-button"</span><span>;&nbsp;&nbsp;</span></span></li><li class=""><span>});&nbsp;&nbsp;</span></li></ol></div><pre name="code" class="html" style="display: none;">(document).bind(“mobileinit”, function() { // We change default values .mobile.defaultPageTransition=fade; .mobile.minScrollBack = 150; $.mobile.activeBtnClass = “active-button”; });

      minScrollBack默认页面最小滚动值为250像素高。

      activePageClass/activeBtnClass修改当前活动页面或激活按钮的类名。

      命名空间和Ajax功能:

      1. (document).bind("mobileinit",&nbsp;function()&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;We&nbsp;change&nbsp;default&nbsp;values&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$<span class="attribute">.mobile.ns</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"firt"</span><span>;&nbsp;&nbsp;</span></span></li><li class=""><span>});&nbsp;&nbsp;</span></li></ol></div><pre name="code" class="html" style="display: none;">(document).bind(“mobileinit”, function() { // We change default values $.mobile.ns = “firt”; });为了避免框架间的冲突,可以使用ns全局属性来定义一个命名空间。例如上式使用后,页面模板就会变成:

        1. <div data-firt-role=“page”>  
        2.    <div data-firt-role=“header” data-firt-theme=“a”>  
        3.   
        4.    </div>  
        5.    <div data-firt-role=“content”>  
        6.   
        7.    </div>  
        8. </div>  
        <div data-firt-role="page">
           <div data-firt-role="header" data-firt-theme="a">
        
           </div>
           <div data-firt-role="content">
        
           </div>
        </div>

        如果定义了命名空间,则需要手动修改CSS文件(包括结构和主题文件)以便识别。

        $.mobile.ajaxEnabled = false:禁用所有Ajax功能,所有外部页面将通过浏览器使用完整的HTTP请求加载。

        默认情况下,XMLHttpRequest不支持跨域请求,但是可以通过$.mobile.allowCrossDomainPages=true来开启跨域。


        本地化字符串

        使用Ajax加载外部页面时显示的加载消息、外部页面无法加载时的加载错误消息以及一些其他基于组件的消息。

        下面是各个消息的列表及默认值:

        1. // Global strings  
        2. <span class="attribute">.mobile.loadingMessage</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"loading"</span><span>;&nbsp;&nbsp;</span></span></li><li class="alt"><span>.mobile.pageLoadErrorMessage = “Error Loading Page”;  
        3.   
        4. // 组件字符串  
        5. <span class="attribute">.mobile.page.prototype.options.backBtnText</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"Back"</span><span>;&nbsp;&nbsp;</span></span></li><li class="alt"><span>.mobile.dialog.prototype.options.closeBtnText = “Close”  
        6. <span class="attribute">.mobile.collapsible.prototype.options.expandCueText</span><span>&nbsp;=&nbsp;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;<span class="attribute-value">"&nbsp;click&nbsp;to&nbsp;expand&nbsp;contents"</span><span>;&nbsp;&nbsp;</span></span></li><li class=""><span>.mobile.collapsible.prototype.options. collapseCueText = “ click to collapse contents”;  
        7. <span class="attribute">.mobile.listview.prototype.options.filterPlaceholder</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"Filter&nbsp;items..."</span><span>;&nbsp;&nbsp;</span></span></li><li class=""><span>.mobile.selectmenu.prototype.options.closeText = “Close”;  
        // Global strings
        $.mobile.loadingMessage = "loading";
        $.mobile.pageLoadErrorMessage = "Error Loading Page";
        
        // 组件字符串
        $.mobile.page.prototype.options.backBtnText = "Back";
        $.mobile.dialog.prototype.options.closeBtnText = "Close"
        $.mobile.collapsible.prototype.options.expandCueText = 
         " click to expand contents";
        $.mobile.collapsible.prototype.options. collapseCueText = " click to collapse contents";
        $.mobile.listview.prototype.options.filterPlaceholder = "Filter items...";
        $.mobile.selectmenu.prototype.options.closeText = "Close";
        创建一个类似的中文版本的JQM文本方案:

        1. (document).bind('mobileinit',&nbsp;function()&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;//&nbsp;Global&nbsp;strings&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;$<span class="attribute">.mobile.loadingMessage</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"正在加载"</span><span>;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;$<span class="attribute">.mobile.pageLoadErrorMessage</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"加载页面出错"</span><span>;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;//&nbsp;Widget&nbsp;strings&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;$<span class="attribute">.mobile.page.prototype.options.backBtnText</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"后退"</span><span>;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;$<span class="attribute">.mobile.dialog.prototype.options.closeBtnText</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"关闭"</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;$<span class="attribute">.mobile.collapsible.prototype.options.expandCueText</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"点击展开"</span><span>;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;$.mobile.collapsible.prototype.options.&nbsp;<span class="attribute">collapseCueText</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"&nbsp;点击收起&nbsp;"</span><span>;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;$<span class="attribute">.mobile.listview.prototype.options.filterPlaceholder</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"&nbsp;过滤&nbsp;"</span><span>;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;$<span class="attribute">.mobile.selectmenu.prototype.options.closeText</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"&nbsp;关闭&nbsp;"</span><span>;&nbsp;&nbsp;</span></span></li><li class="alt"><span>});&nbsp;&nbsp;</span></li></ol></div><pre name="code" class="html" style="display: none;">(document).bind(‘mobileinit’, function() { // Global strings .mobile.loadingMessage=; .mobile.pageLoadErrorMessage = “加载页面出错”; // Widget strings .mobile.page.prototype.options.backBtnText=退; .mobile.dialog.prototype.options.closeBtnText = “关闭” .mobile.collapsible.prototype.options.expandCueText=; .mobile.collapsible.prototype.options. collapseCueText = ” 点击收起 “; .mobile.listview.prototype.options.filterPlaceholder=; .mobile.selectmenu.prototype.options.closeText = ” 关闭 “; });


          2.2页面配置

          1. 改变页面默认主题:  
          改变页面默认主题:
          1. (document).bind('mobileinit',&nbsp;function()&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;$<span class="attribute">.mobile.page.prototype.options.addBackBtn</span><span>&nbsp;&nbsp;&nbsp;=&nbsp;</span><span class="attribute-value">true</span><span>;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;$<span class="attribute">.mobile.page.prototype.options.backBtnTheme</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"e"</span><span>;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;$<span class="attribute">.mobile.page.prototype.options.headerTheme</span><span>&nbsp;&nbsp;=&nbsp;</span><span class="attribute-value">"b"</span><span>;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;$<span class="attribute">.mobile.page.prototype.options.footerTheme</span><span>&nbsp;&nbsp;=&nbsp;</span><span class="attribute-value">"d"</span><span>;&nbsp;&nbsp;</span></span></li><li class=""><span>});&nbsp;&nbsp;</span></li></ol></div><pre name="code" class="html" style="display: none;">(document).bind(‘mobileinit’, function() { .mobile.page.prototype.options.addBackBtn=true; .mobile.page.prototype.options.backBtnTheme = “e”; .mobile.page.prototype.options.headerTheme=b; .mobile.page.prototype.options.footerTheme = “d”; });
            2.3部件配置

            JQM中的每个部件widget都有自己的默认配置属性,可以通过部件的prototype属性中的options对象来改变部件的默认配置,接口为$.mobile.<部件名>.prototype.options

            1. (document).bind('mobileinit',&nbsp;function()&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;在所有listviews中启用过滤&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;$<span class="attribute">.mobile.listview.prototype.filter</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">true</span><span>;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;在所有选择框上启用非原生菜单&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;$<span class="attribute">.mobile.selectmenu.prototype.nativeMenu</span><span>=</span><span class="attribute-value">false</span><span>;&nbsp;&nbsp;</span></span></li><li class="alt"><span>});&nbsp;&nbsp;</span></li></ol></div><pre name="code" class="html" style="display: none;">(document).bind(‘mobileinit’, function() { // 在所有listviews中启用过滤 .mobile.listview.prototype.filter=true;// .mobile.selectmenu.prototype.nativeMenu=false; });
              1. <strong>  
              2. </strong>  
              <strong>
              </strong>
              1. <strong>3.实用工具</strong>  
              <strong>3.实用工具</strong>

              3.1Data-*工具

              1. 取得页面上所有btn集合:  
              取得页面上所有btn集合:
              1. var buttons = ("a[</span><span class="attribute">data-role</span><span>=</span><span class="attribute-value">button</span><span>"]);&nbsp;&nbsp;</span></span></li></ol></div><pre name="code" class="html" style="display: none;">var buttons =(“a[data-role=button”]);
                1. JQM添加了一个名为jqmData的过滤器,并会应用我们指定的命名空间,上面的代码可以更改为:  
                JQM添加了一个名为jqmData的过滤器,并会应用我们指定的命名空间,上面的代码可以更改为:
                1. <pre name=“code” class=“html”>var buttons = ("a:jqmData(</span><span class="attribute">role</span><span>=</span><span class="attribute-value">'button'</span><span>)");&nbsp;&nbsp;</span></span></li></ol></div><pre name="code" class="html" style="display: none;">&lt;pre name="code" class="html"&gt;var buttons =(“a:jqmData(role=’button’)”);同时,在JQM集合对象上应该使用jqmData和jqmRemoveData来代替原来的jQuery函数data和removedata,例如:
                  1. ("a").jqmRemoveData("transition");&nbsp;&nbsp;</span></span></li><li class=""><span>(“#button1”).jqmData(“theme”, “a”);  
                  $("a").jqmRemoveData("transition");
                  $("#button1").jqmData("theme", "a");


                   3.2页面工具 

                  当前页面:

                  1. var currentPageId = .mobile.activePage.id;&nbsp;&nbsp;</span></span></li></ol></div><pre name="code" class="html" style="display: none;">var currentPageId =.mobile.activePage.id;可以通过 .mobile.pageContainer访body .mobile.changePage方法,它允许我们转向另一个页面,就像用户点击了相应的链接一样。

                    加载外部页面:

                    1. .mobile.changePage("external.html");&nbsp;&nbsp;</span></span></li></ol></div><pre name="code" class="html" style="display: none;">.mobile.changePage(“external.html”);转向当前文档中已经存在的内部页面:

                      1. .mobile.changePage( (“#pageId”));  
                      $.mobile.changePage($("#pageId"));


                      更改页面切换效果:

                      1. .mobile.changePage( (“#page2”), {  
                      2.     transition: “slide”,  
                      3.     reverse: true  
                      4. });  
                      $.mobile.changePage($("#page2"), {
                          transition: "slide",
                          reverse: true
                      });
                      示例:通过POST方式发送数据并加载一个外部页面:

                      1. <script>  
                      2. function viewProduct(idProduct) {  
                      3.    $.mobile.changePage(“productdetail.php”, {  
                      4.        method: “post”,  
                      5.        data: {  
                      6.            action: ‘getProduct’,  
                      7.            id: idProduct  
                      8.        },  
                      9.        transition: “fade”  
                      10.    });  
                      11. }  
                      12. </script>  
                      13.   
                      14. <!– … –>  
                      15. <a href=“javascript:viewProduct(5200)” data-role=“button”>Product details</a>  
                      <script>
                      function viewProduct(idProduct) {
                         $.mobile.changePage("productdetail.php", {
                             method: "post",
                             data: {
                                 action: 'getProduct',
                                 id: idProduct
                             },
                             transition: "fade"
                         });
                      }
                      </script>
                      
                      <!-- ... -->
                      <a href="javascript:viewProduct(5200)" data-role="button">Product details</a>

                      3.3平台、路径、UI工具

                      $.mobile对象中用于查询当前平台的工具。

                      getDocumentUrl():返回原始文档的RU

                      $.mobile.path访问路径管理工具。

                      parseUrl(url):返回一个对象,各个属性对应该URL的各个部分

                      makePathAbsolute(relativePath,absolutePate):基于相对路径返回绝对路径

                      makeURLAbsolute(relativeUrl,absoluteUrl):基于相对URL返回绝对URL

                      isSameDomain(Url1,Url2):如果两个URL同域名则返回true

                      isRelativeUrl(Url):如果URL是相对地址则返回true

                      isAbsolute(Url):如果URL是绝对地址则返回true


                      $.mobile.silentScroll(y)可以将页面滚动到任意位置,同时不显示动画,也不触发任何时间。

                      // 显示加载信息,并在2s后将其隐藏

                      1. .mobile.showPageLoadingMsg();&nbsp;&nbsp;</span></span></li><li class=""><span>setTimeout(function()&nbsp;{&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;$.mobile.hidePageLoadingMsg();&nbsp;&nbsp;</span></li><li class=""><span>},&nbsp;2000);&nbsp;&nbsp;</span></li></ol></div><pre name="code" class="html" style="display: none;">.mobile.showPageLoadingMsg(); setTimeout(function() { .mobile.hidePageLoadingMsg();
                        }, 2000);
                        .mobile.fixedToolbars.show()/.hide():显示、隐藏固定工具栏

                        4.自定义过渡

                        添加一个explode过渡类型:

                        1. </span><span class="attribute">.mobile.transitionHandlers.explode</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">explodeTransitionHandler</span><span>;&nbsp;&nbsp;</span></span></li></ol></div><pre name="code" class="html" style="display: none;">.mobile.transitionHandlers.explode = explodeTransitionHandler;
                          修改默认的过渡,将它赋值为任何其他处理函数

                          1. </span><span class="attribute">.mobile.defaultTransitionHandler</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">explodeTransitionHandler</span><span>;&nbsp;&nbsp;</span></span></li></ol></div><pre name="code" class="html" style="display: none;">.mobile.defaultTransitionHandler = explodeTransitionHandler;
                            1. </pre><pre name=“code” class=“html”>过渡处理函数是一个JavaScript函数,接受四个参数:过渡名,reverse(如果设置为true,表示本过渡将反转调用),toPage(指向目标页面的jQuery DOM对象),fromPage(指向原始页面的jQuery DOM对象)  
                            </pre><pre name="code" class="html">过渡处理函数是一个JavaScript函数,接受四个参数:过渡名,reverse(如果设置为true,表示本过渡将反转调用),toPage(指向目标页面的jQuery DOM对象),fromPage(指向原始页面的jQuery DOM对象)


                            设置过渡效果后,记得更改$.mobile.activePageClass,来更改当前页面。


                            5.动态内容:

                            5.1创建页面:

                            1. <div data-role=“page”>  
                            2.         <div data-role=“header”>  
                            3.     <h1>Dynamic page</h1>  
                            4.     </div>  
                            5.         <div data-role=“content”>  
                            6.         <a id=“button1” href=“javascript:addPages()” data-role=“button”>Add Pages</a>  
                            7.         <ul id=“list1”>  
                            8.   
                            9.         </ul>  
                            10.     </div>  
                            11. </div>  
                            <div data-role="page">
                                    <div data-role="header">
                                <h1>Dynamic page</h1>
                                </div>
                                    <div data-role="content">
                                    <a id="button1" href="javascript:addPages()" data-role="button">Add Pages</a>
                                    <ul id="list1">
                            
                                    </ul>
                                </div>
                            </div>

                            1. function addPages() {  
                            2.   for (var i=1; i<5; i++) {  
                            3.       var page = ("</span><span class="tag">&lt;</span><span class="tag-name">div</span><span class="tag">&gt;</span><span>").jqmData("role",&nbsp;"page").attr("id",&nbsp;"page"&nbsp;+&nbsp;i);&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;header&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(“<div>“).attr(“data-role”, “header”).append(("</span><span class="tag">&lt;</span><span class="tag-name">h1</span><span class="tag">&gt;</span><span>")&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.html("Page&nbsp;"&nbsp;+&nbsp;i)).appendTo(page);&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;content&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(“<div>“).attr(“data-role”, “content”).append(("</span><span class="tag">&lt;</span><span class="tag-name">p</span><span class="tag">&gt;</span><span>")&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.html("Contents&nbsp;for&nbsp;page&nbsp;"&nbsp;+&nbsp;i))&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.appendTo(page);&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(“body”).append(page);  
                            4.   
                            5.            ("<span class="tag">&lt;</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>").append((“<a>“).attr(“href”, ”#page”+i).html(“Go to page ” + i))  
                            6.            .appendTo(“#list1”);  
                            7.   }  
                            8.       $(“#button1”).hide();  
                            9. };  
                            function addPages() {
                              for (var i=1; i<5; i++) {
                                  var page = $("<div>").jqmData("role", "page").attr("id", "page" + i);
                                  // header
                                  $("&lt;div&gt;").attr("data-role", "header").append($("<h1>")
                                      .html("Page " + i)).appendTo(page);
                                  // content
                                  $("&lt;div&gt;").attr("data-role", "content").append($("<p>")
                                      .html("Contents for page " + i))
                                      .appendTo(page);
                            
                                  $("body").append(page);
                            
                                       $("&lt;li&gt;").append($("<a>").attr("href", "#page"+i).html("Go to page " + i))
                                       .appendTo("#list1");
                              }
                                  $("#button1").hide();
                            };

                            动态创建页面有一个缺点:如果用户在某个新建的页面上刷新当前页面,必须监听mobileinit并检查(通过读取页面地址中的散列值或某个页面事件)用户是否正在加载某个动态页面,否则无法刷新。第二次加载时,动态页面将不存在,需要重新创建。



                            创建动态页面的最佳方法是只连接它们,例如:连到#page1并捕获pagebeforechange事件,修改框架对应的行为。

                            1. <!DOCTYPE html>  
                            2. <html xmlns=“http://www.w3.org/1999/xhtml”>  
                            3. <head>  
                            4. <meta charset=“UTF-8” />  
                            5. <title>jQuery Mobile</title>  
                            6. <script src=“jquery.js”></script>  
                            7. <link rel=“stylesheet” type=“text/css” href=“jquery.mobile-1.0.css”>  
                            8. <script src=“jquery.mobile-1.0.js”></script>  
                            9. <script>  
                            10. (document).bind('pagebeforechange',&nbsp;function(event,&nbsp;data)&nbsp;{&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;从data.toPage中收到目标页面,将它标准化&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;<span class="attribute">url</span><span>&nbsp;=&nbsp;.mobile.path.parseUrl(data.toPage).hash;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(url!=undefined&nbsp;&amp;&amp;&nbsp;url.length<span class="tag">&gt;</span><span>5&nbsp;&amp;&amp;&nbsp;url.substring(0,&nbsp;5)=="#page")&nbsp;{&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;We&nbsp;dynamically&nbsp;inject&nbsp;a&nbsp;new&nbsp;page&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;<span class="attribute">id</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">url</span><span>.substring(5);&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;使用DOM中已经存在的页面模板&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;("#pageTemplate&nbsp;h1").html("Page&nbsp;"&nbsp;+&nbsp;id);&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//转向真实的页面模板,同时不在访问历史上使用的真实页面&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.mobile.changePage($(“#pageTemplate”), {dataUrl: data.toPage});  
                            11.   
                            12.                 // 阻止正常页面过渡  
                            13.                 event.preventDefault();  
                            14.         }  
                            15.   
                            16. });  
                            17.   
                            18. </script>  
                            19. <meta name=“viewport” content=“width=device-width,user-scalable=no”>  
                            20.   
                            21. </head>  
                            22.   
                            23. <body>  
                            24. <div data-role=“page”>  
                            25.         <div data-role=“header”>  
                            26.     <h1>Dynamic pages</h1>  
                            27.     </div>  
                            28.         <div data-role=“content”>  
                            29.         <a id=“button1” href=“#page1” data-role=“button”>Page 1</a>  
                            30.         <a id=“button1” href=“#page2” data-role=“button”>Page 2</a>  
                            31.         <a id=“button1” href=“#page3” data-role=“button”>Page 3</a>  
                            32.         <a id=“button1” href=“#page4” data-role=“button”>Page 4</a>  
                            33.     </div>  
                            34. </div>  
                            35. <div data-role=“page” id=“pageTemplate”>  
                            36.   <div data-role=“header”>  
                            37.     <h1>Header</h1>  
                            38.   </div>  
                            39.   <div data-role=“content”>Content</div>  
                            40.   <div data-role=“footer”>  
                            41.     <h4>Footer</h4>  
                            42.   </div>  
                            43. </div>  
                            44. </body>  
                            45. </html>  
                            <!DOCTYPE html>
                            <html xmlns="http://www.w3.org/1999/xhtml">
                            <head>
                            <meta charset="UTF-8" />
                            <title>jQuery Mobile</title>
                            <script src="jquery.js"></script>
                            <link rel="stylesheet" type="text/css" href="jquery.mobile-1.0.css">
                            <script src="jquery.mobile-1.0.js"></script>
                            <script>
                            $(document).bind('pagebeforechange', function(event, data) {
                                    // 从data.toPage中收到目标页面,将它标准化
                                    var url = $.mobile.path.parseUrl(data.toPage).hash;
                            
                                    if (url!=undefined && url.length>5 && url.substring(0, 5)=="#page") {
                                            // We dynamically inject a new page
                                            var id = url.substring(5);
                            
                                            // 使用DOM中已经存在的页面模板
                                            $("#pageTemplate h1").html("Page " + id);
                            
                                            //转向真实的页面模板,同时不在访问历史上使用的真实页面
                                            $.mobile.changePage($("#pageTemplate"), {dataUrl: data.toPage});
                            
                                            // 阻止正常页面过渡
                                            event.preventDefault();
                                    }
                            
                            });
                            
                            </script>
                            <meta name="viewport" content="width=device-width,user-scalable=no">
                            
                            </head>
                            
                            <body>
                            <div data-role="page">
                                    <div data-role="header">
                                <h1>Dynamic pages</h1>
                                </div>
                                    <div data-role="content">
                                    <a id="button1" href="#page1" data-role="button">Page 1</a>
                                    <a id="button1" href="#page2" data-role="button">Page 2</a>
                                    <a id="button1" href="#page3" data-role="button">Page 3</a>
                                    <a id="button1" href="#page4" data-role="button">Page 4</a>
                                </div>
                            </div>
                            <div data-role="page" id="pageTemplate">
                              <div data-role="header">
                                <h1>Header</h1>
                              </div>
                              <div data-role="content">Content</div>
                              <div data-role="footer">
                                <h4>Footer</h4>
                              </div>
                            </div>
                            </body>
                            </html>

                            5.2创建部件

                            动态创建部件需要调用部件对应的构造器。每个部件都有自己的构造器,它们就是与部件名同名的jQuery函数,例如执行$(“#list1”).listview(),则该ul将马上被转换并渲染为一个列表视图。

                            将a元素转换为按钮:

                            1. ("a").button();&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;//或&nbsp;&nbsp;</span></li><li class="alt"><span>var&nbsp;<span class="attribute">button</span><span>&nbsp;=&nbsp;(“<a>“).attr(“href”, “somewhere.html”).button();  
                            $("a").button();
                                //或
                            var button = $("<a>").attr("href", "somewhere.html").button();


                            5.3更新部件

                            1. 动态添加内容后,需要刷新这个部件。  
                            动态添加内容后,需要刷新这个部件。
                            1. ("#list1").listview('refresh');&nbsp;&nbsp;</span></span></li><li class=""><span>(“#checkbox”).val(‘true’).checkboxradio(‘refresh’);  
                            $("#list1").listview('refresh');
                            $("#checkbox").val('true').checkboxradio('refresh');


                            6.创建网格

                            用于创建CSS网格。

                            1. ("#element").grid();&nbsp;&nbsp;</span></span></li></ol></div><pre name="code" class="html" style="display: none;">(“#element”).grid();
                              1. 根据它的子元素的数目,框架将自动为该元素应用正确的ui-grid-<letter>类,为其子元素应用ui-block-<letter>类。  
                              根据它的子元素的数目,框架将自动为该元素应用正确的ui-grid-<letter>类,为其子元素应用ui-block-<letter>类。
                              1. </pre><pre name=“code” class=“html”>  
                              </pre><pre name="code" class="html">
                              7.改变页面内容

                              要刷新一个容器,只需要在页面上触发create事件,这时每个部件就会再次检查是否需要创建新的实例。

                              1. ("#content").html(newHTMLcontentWithWidgets);&nbsp;&nbsp;</span></span></li><li class=""><span>(“#page1”).trigger(“create”);  
                              $("#content").html(newHTMLcontentWithWidgets);
                              $("#page1").trigger("create");
                              通常每个部件的构造器都会响应页面的create事件,以便检查是否需要创建对应的控件。


                              8.处理事件
                              8.1页面事件

                              要全局处理页面事件,可以调用 (document).bind (“:jqmData(role=’page’)”).bind。

                              创建事件:

                              pagebeforecreate:页面已插入DOM,但是组件还未创建

                              pagecreate:页面已被创建,但组件还未渲染

                              pageinit:页面已完全加载

                              pageremove:页面已从DOM移除

                              1. ("#page2").live("pageinit",&nbsp;function(event)&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;</span></li><li class="alt"><span>});&nbsp;&nbsp;</span></li></ol></div><pre name="code" class="html" style="display: none;">(“#page2”).live(“pageinit”, function(event) { });


                                加载事件:
                                pagebeforeload:在所有Ajax请求完成之前执行

                                pageload:当新页面已被加载并插入到DOM后执行

                                pageloadfailed:指定页面无法加载时执行

                                这些事件处理程序都会受到两个参数,一个事件对象和一个数据对象。

                                1. (document).bind("pageloadfailed",&nbsp;function(event,&nbsp;data)&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data.preventDefault();//阻止默认行为&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Custom&nbsp;error&nbsp;management&nbsp;&nbsp;</span></li><li class=""><span>});&nbsp;&nbsp;</span></li></ol></div><pre name="code" class="html" style="display: none;">(document).bind(“pageloadfailed”, function(event, data) { data.preventDefault();//阻止默认行为 // Custom error management });


                                  显示事件:

                                  pagebeforechange:在页面改变发生之前以及过渡开始之前执行

                                  pagechange:在页面改变完成之后执行

                                  pagechangefailed:页面改变无法完成时执行

                                  toPage:如果目标页面是外部页面,则值为目标页面的URL字符串;如果是内部页面,则值为目标页面的DOM对象

                                  options:与发送到$.mobile.changePage的选项相同

                                  pagebeforeshow:在过渡并显示页面之前执行(页面仍然处于隐藏状态)

                                  pageshow:在页面已完成加载过渡并正显示在屏幕上时执行

                                  pagebeforehide:在页面隐藏之前执行

                                  pagehide:页面已完成卸载过渡并已隐藏时执行



                                  8.2方向事件

                                  1. (document).bind("orientationchange",&nbsp;function(orientation)&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(<span class="attribute">orientation</span><span>=="landscape")&nbsp;{&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;现在是纵向&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;现在是横向&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li class="alt"><span>});&nbsp;&nbsp;</span></li></ol></div><pre name="code" class="html" style="display: none;">(document).bind(“orientationchange”, function(orientation) { if (orientation==”landscape”) { // 现在是纵向 } else { // 现在是横向 } });
                                    8.4手势事件

                                    tap:在屏幕上快速触摸一下时触发

                                    taphold:触摸屏幕并持续按住1s时触发

                                    swipeleft:从右划到左时触发

                                    swiperight:从左划到右时触发

                                    1. (document).bind("mobileinit",&nbsp;function()&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;$("#page2").live("swiperight",&nbsp;goBackToPage1);&nbsp;&nbsp;</span></li><li class="alt"><span>});&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;</span></li><li class="alt"><span>function&nbsp;goBackToPage1()&nbsp;{&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;$.mobile.changePage("#page1",&nbsp;{&nbsp;reverse:&nbsp;true&nbsp;});&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;$("#page2").unbind("swiperight",&nbsp;goBackToPage1);&nbsp;&nbsp;</span></li><li class=""><span>}&nbsp;&nbsp;</span></li></ol></div><pre name="code" class="html" style="display: none;">(document).bind(“mobileinit”, function() { (“#page2”).live(“swiperight”, goBackToPage1);
                                      });

                                      function goBackToPage1() {
                                      .mobile.changePage(“#page1”, { reverse: true }); $(“#page2”).unbind(“swiperight”, goBackToPage1); }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值