2014-02-15 58 views
3

我買了JQM的變化感到困惑:JQM 1.4.1:新的事件 'pagecontainershow'

正如你可能知道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

是如何工作的

感謝

+1

可以附加到特定頁面的唯一事件是'pahecreate'。 – Omar

+0

我在GitHub上發佈了一個問題。他們正在致力於更新api。 https://github.com/jquery/jquery-mobile/issues/6865 – Omar

回答

2

我只是解決了不能夠使用「開關的情況下」一句這樣的附加到一個頁面pagecontainershow問題:

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

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

    switch(ThisPage){ 

    case 'Page1': 

    case 'Page2': 

    case 'Page3': 


etc.... 

但是我擔心的是,如果他們修改框架來支持(重新)附在頁面上的事件,那麼我應該做返工和返工。

+0

是的,你說的沒錯。好的解決方案我開始非常惱火地閱讀新的API,並發現所有這些不支持1.4.1向後兼容的棄用事件。 – Michael

0

下面是基於以前的響應我寫的更容易發現這個問題奧馬爾公佈被關閉的不是一個錯誤後讓我轉換JQM 1.3代碼在我的HTML文件的一些代碼:

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);

0

只要檢查當前頁面並退出事件,如果不是您想要的那個,那麼該如何?這樣,你可以使用單獨的函數作爲「正常」。

$(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 
});