有没有办法从另一个插件检测Jquery Mobile中的第一页加载?

时间:2012-06-17 16:48:56

标签: jquery events jquery-mobile event-listener

我正在寻找一种方法来使用JQM并在加载第一页之前覆盖内容。

JQM初始化如此(来自最新的JQM代码):

( function( $, window, undefined ) {
    var $html = $( "html" ),
    $head = $( "head" ),
    $window = $( window );

    // trigger mobileinit event 
    $( window.document ).trigger( "mobileinit" );

    ... 

    $.extend($.mobile, {
        // find and enhance the pages in the dom and transition to the first page.
        initializePage: function() {

            ...
            // alert listeners that the pagecontainer has been determined for binding
            // to events triggered on it
            $window.trigger( "pagecontainercreate" );
            ...

因此我可以使用两个事件 mobileinit pagecontainercreate 。我知道HTML很容易这样:

<script type="text/javascript" src="jquery-1.7.1.min.js"></script>
<script type="text/javascript">
    $( window ).bind( 'pagecontainercreate', function() {
        console.log("HELLO");
        });
</script>
<script type="text/javascript" src="jquery.mobile-1.1.0.multiview_con.js"></script>   
<script type="text/javascript" src="plugin.js"></script>

但是如果我想从JACM之后的INSIDE plugin.js绑定到这些事件怎么办?如果我在plugin.js中放置相同的监听器,它永远不会触发。我想,因为为时已晚。但我需要阻止默认加载第一页,所以一旦JQM试图加载初始页面,对我来说就太晚了。

问题
有没有办法在第一页加载从JQM之后的插件开始之前收听这些事件中的任何一个或任何其他事件?

修改
我无法使用 pageinit ,因为它会在调用第一页后触发。 Dito用于 pageCreate ,它也不会从插件内部触发。

1 个答案:

答案 0 :(得分:1)

确定。我用JQM autoinitialize选项(see here)将其解决为假,如下所示:

$(document).bind("mobileinit", function(){
$.mobile.autoInitializePage = false;
});

这样Jquery Mobile就不会自动启动,只有当我手动调用它时才会启动:

 if ( $.mobile.autoInitializePage == false){
    $.mobile.initializePage();
    }

我已将最后一个片段放在我的第二个插件中,需要在JQM触发第一个页面init之前完全设置。设置第二个插件后,我调用initializePage(),一切运行正常。