2013-02-06 63 views
1

我正在使用jquery mobile的應用程序以及將應用程序重新分解爲具有RequireJS的模塊的過程。我幾乎完成了任務,但遇到了一個我需要一點幫助的問題。requirejs模塊不捕獲pageinit事件

我手動加載我的腳本文件(jQuery,jqm,淘汰賽等),並將這些庫定義爲我的main.js文件中的第一個瘦。

(function(){ 
    var root = this 
    define('jquery', [], function() { return root.jQuery; }); 
    define('ko', [], function() { return root.ko; }); 
    .... 
})(); 

接下來我加載jQuery Mobile的插件並啓動應用

.... 
    require([ 
     'Scripts/lib/mobile/jquery.mobile-1.2.0' 
    ], function() { 
     $(document).on('pageinit' function(){ alert('page init event triggere'); }); 
     boot(); 
    }); 

我的問題是,「pageinit」事件已經被時間requirejs觸發執行工廠函數,它重視的事件。隨後的pageinit事件如預期的那樣被捕獲,但是當應用第一次加載時,即將丟失最初的一個。如果我將事件綁定移出require模塊,它可以正常工作。任何想法如何註冊和處理這些jqm事件?

在此先感謝。

回答

2

我有同樣的問題,我發現,你不應該載入jQuery Mobile的模塊作爲一個全球性的依賴,而是直接在功能的核心:

require(["jquery"], function($) { 
    console.log("requireJS loaded"); 

    require(["jquery.mobile"]); 

    $(document).on('pagecreate pageinit pageshow', '#mappage', function(event) { 
     var eventType = event.type; 
     switch(eventType) { 
      case 'pagecreate': 
       console.log("mappage : pagecreate"); 
       break; 
      case 'pageinit': 
       console.log("mappage : pageinit"); 
       break; 
      case 'pageshow': 
       console.log("mappage : pageshow"); 
       break; 
     }; 
    }); 
}); 
+0

謝謝,這工作真棒。我做的唯一不同的是我在調用require之前先綁定事件。不確定是否重要,但只是認爲稍微防守可能會更好。 – Aaron