requirejs模块没有捕获pageinit事件

时间:2013-02-06 14:08:41

标签: jquery-mobile requirejs require

我正在使用jquery mobile处理应用程序,并在使用RequireJS将应用程序重新分解为模块的过程中。我差不多完成了任务,但碰到了一个我需要帮助的问题。

我手动加载我的脚本文件(jquery,jqm,knockout等)并将这些库定义为main.js文件中的第一个文件。

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

接下来,我加载jquery移动插件并启动应用程序

    ....
    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事件的?

提前致谢。

1 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,我发现你不应该将jquery移动模块作为全局依赖加载,而是直接在函数的核心中加载:

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