JQM 1.4.1:新事件'pagecontainershow'

时间:2014-02-15 17:51:51

标签: jquery-mobile

我对JQM的变化感到困惑:

您可能知道JQM已弃用该事件:

$(document).on('pageshow', '#MyPage', function(){ 

并将其替换为:

$(document).on('pagecontainershow', function (e, ui) {

但是,此新事件未附加到特定页面,如前所述。然而,事件:

$(document).on('pagecreate', '#MyPage', function(){ 

仍然附加到特定页面,我认为其他页面事件仍然附加到特定页面。

我的问题是:

某些事件附加到页面而其他事件没有,这使得框架非常混乱。不应该更好地标准化所有事件,因为版本1.3都附加到页面上?

事件'pagecreate'和所有页面事件将来会被移植到页面,因为'pageshow'现在是版本1.4.1

有人可以解释事件在1.4.1中的运作方式

由于

3 个答案:

答案 0 :(得分:2)

我刚刚解决了pagecontainers无法通过使用像这样的“switch case”句子附加到PAGE的问题:

$(document).on('pagecontainershow', function (e, ui) {

var ThisPage = $(':mobile-pagecontainer').pagecontainer('getActivePage').attr('id');

  switch(ThisPage){

    case 'Page1':

    case 'Page2':

    case 'Page3':


etc....

但是我担心的是,如果他们修改框架以支持(再次)附加到页面的事件,那么我应该做返工和返工。

答案 1 :(得分:0)

这里有一些基于我之前写的回复的代码,在我发现Omar发布的关于这个问题的关闭不是一个错误之后,我在我的HTML文件中转换JQM 1.3代码变得更容易了:

function setPageContainerHandlers(){
    function getPageContainerEventHandler(action){
        var handler = function(e, ui){
            var id = $(':mobile-pagecontainer').pagecontainer('getActivePage').attr('id');
            var f = window.page_handlers[action]['#' + id];
            if ('function' == typeof f){
                f(e, ui);
            }
        }

        return handler;
    }

    var events = ['pagecontainershow', 'pagecontainerhide', 'pagecontainerbeforeload', 'pagecontainerbeforeshow', 'pagecontainerload', 'pagecontainerloadfailed', 'pagecontainerchangefailed'];
    var actions = ['pageshow', 'pagehide', 'pagebeforeload', 'pagebeforeshow', 'pageload', 'pageloadfailed', 'pagechangefailed']

    for(var i = 0; i < events.length; i++){
        var handler = getPageContainerEventHandler(actions[i]);
        $(document).on(events[i], handler);
        window.page_container_handlers[events[i]] = handler;
        window.page_handlers[actions[i]] = {};
    }
}

function registerPageHandler(id, action, handler){
    window.page_handlers[action][id] = handler;
}

然后,只要在文档头的setPageContainerHandlers()标记中调用<script>

$("#results").on("pagebeforeshow", initResults);

变为

registerPageHandler("#results", "pagebeforeshow", initResults);

答案 2 :(得分:0)

如果不是你想要的那个,只检查当前页面并退出事件怎么样? 这样,您可以使用单独的功能作为&#34;普通&#34;。

$(document).on('pagecontainershow', function (e, ui) {
    if (ui.toPage[0].id != "YOUR_PAGE_1") return;

    //Do you stuff for YOUR_PAGE_1 here
});

$(document).on('pagecontainershow', function (e, ui) {
    if (ui.toPage[0].id != "YOUR_PAGE_2") return;

    //Do you stuff for YOUR_PAGE_2 here
});