我如何知道 jQuery 移动版正在加载哪个页面?

How do I know what page is loading with jQuery Mobile?

在学习 JQM 时,我发现 JQM 不像普通浏览器那样加载页面。它只是获取内容并更新 DOM.

When the requested page loads, jQuery Mobile parses the document for an element with the data-role="page" attribute and inserts that code into the DOM of the original page.

我混合使用物理页面和 JQM 页面。使用 PHP 加载页面,我的模板代码如下所示:

include('views/widgets/head.php');
include($view);
include('views/widgets/footer.php');

视图与 PHP 页面相同。

首页
URL: mysite.com
页数:#frontPage

B页
URL: 我的网站.com/page-b
页面:#listPage、#infoPage、#mapPage

C页
URL: 我的网站.com/page-c
页面:#listPage、#infoPage、#mapPage

我目前的解决方案是将多页包装在一个容器中:

这或许可以解释为什么我在使用这段代码时遇到问题:

if($('#frontPage').length > 0) { Lib.setTitle('Front Page'); }
if($('#pageB').length > 0) { Lib.setTitle('Page B'); }
if($('#pageC').length > 0) { Lib.setTitle('Page C'); }

每当我导航回我的首页时,似乎第一个语句被触发,然后被最后一个触发的语句覆盖。我知道,因为标题在首次设置为 "Front Page" 并随后被 "Page C" 覆盖时会闪烁。

我可能应该使用像 pageload, pagebeforeload, pagebeforeshow 这样的事件,但它们太多了,而且 "similar" 我不确定该使用哪一个。

  1. "correct" 识别我正在加载的页面以便执行正确功能的方法是什么?

  2. 为加载的任何页面执行全局函数的正确代码是什么?

更新
所有自定义 JS 文件都加载到全局/外部页脚中。

您可以使用 pagecontainer 小部件的 beforeshow 事件:http://api.jquerymobile.com/pagecontainer/#event-beforeshow

ui 参数的 toPage 属性 returns 您要导航到的页面的 jQuery object。然后您可以检查其 ID 并显示正确的文本。

$(document).on( "pagecontainerbeforeshow", function( event, ui ) {
    var pageid = ui.toPage.prop("id");

    if(pageid == 'frontPage') { 
        setTitle('Front Page', ui.toPage); 
    } else if (pageid == 'pageB') {
        setTitle('Page B', ui.toPage); 
    } else if(pageid == 'pageC') { 
        setTitle('Page C', ui.toPage); 
    }

});

function setTitle(text, page){
    page.find(".headerText").text(text);
}

DEMO

每次您导航到该页面时都会 运行 这样您每次都可以显示不同的标题。如果您只显示相同的标题,则可以改用 pagecreate 事件,因为当每个页面最初加载到 DOM:

时,它仅 运行s 一次
$(document).on( "pagecreate", function( e ) {    
    var pageid = e.target.id;    

    if (pageid == 'frontPage') { 
        setTitle('Front Page', pageid); 
    } else if (pageid == 'pageB') {
        setTitle('Page B', pageid); 
    } else if(pageid == 'pageC') { 
        setTitle('Page C', pageid); 
    }    
});

function setTitle(text, pageid){
    $("#" + pageid).find(".headerText").text(text);
}

DEMO