1

私は jquery モバイルを使用してアプリケーションに取り組んでおり、RequireJS を使用してアプリケーションをモジュールにリファクタリングしています。タスクはほぼ完了しましたが、少し助けが必要な問題に遭遇しました。

スクリプト ファイル (jquery、jqm、ノックアウトなど) を手動で読み込んでおり、これらのライブラリを 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();
    });

私の問題は、requirejsがイベントにアタッチするファクトリ関数を実行するまでに、「pageinit」イベントがすでにトリガーされていることです。後続の pageinit イベントは期待どおりにキャッチされますが、アプリが最初に読み込まれたときに最初のイベントがありません。イベントバインディングをrequireモジュールの外に移動すると、正常に動作します。これらのjqmイベントを登録して処理する方法はありますか?

前もって感謝します。

4

1 に答える 1

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;
        };
    });
});
于 2013-02-28T07:50:32.077 に答える