1

overrides.js次のようにアプリケーションのデフォルトを設定するスクリプトがあります。

$(document).bind("mobileinit", function(){
    $.mobile.autoInitializePage = false;
    $.mobile.pushStateEnabled = false;
    $.mobile.defaultPageTransition = "fade";
    $('html').addClass('viewGrid');
    console.log("mobileinit detected in overrides");
    $(window).trigger('jqm-ready');
    });

は、ロード後およびロード前にoverrides.jsプルされます。私のページには、フッターに次のスニペットがあります。requireJSJqueryJquery Mobile

console.log("page done loading");
window.addEventListener('jqm-ready', function(){
    console.log("detected jqm-ready")
    // run some code
    });

document.addEventListener('mobilelinit', function(){
    console.log("mobilelinit detected from page");
    // run some code
    });

私のコンソールには次のように表示されます。

page done loading
mobileinit detected in overrides

そのため、ページに追加された eventListener を介してmobileinitカスタムイベントを検出することはできません。jqm-ready

私が使用しているように、Jquery がロードされる前にページが解析されるため、requireJSJquery を使用して を検出することはできません。mobileinit/jqm-readyいずれかのイベントを検出できることを望んでいましたが、今のところ運がありません。実行する必要があるコードは Jquery Mobile イベントにバインドする必要があるため、それらを検出する必要があります。

質問:
私のスニペットに何か問題がありますか、それともこのように mobileinit または jqm-ready にバインドできないのはなぜですか?

4

2 に答える 2

0

Ok。triggerわかりました... を使用してリスナーを追加したイベントにJquery を使用できないと思いますaddEventListener。しかし、そうではないかもしれません。とにかくこれはうまくいきます:

var trigAnalytics = function( trigger ){ 
    console.log("triggered by "+trigger);
    };
document.addEventListener("jqm_ready",function(){console.log("jqm_ready"); trigAnalytics("jqm_ready");},false);

そして、overrides.js

console.log("Hello now");
var evt = document.createEvent("Event");

evt.initEvent("jqm_ready",true,true);
document.dispatchEvent(evt);

動作します。

于 2012-11-10T18:30:01.300 に答える
0

イベント名にタイプミスがあります。次を参照してください。

document.addEventListener('mobilelinit', function(){
                                 ^----- TYPO HERE (should be mobileinit)

それがおそらくあなたがイベントを見ていなかった理由です。

于 2012-11-10T17:10:48.737 に答える