如何在changePage期间阻止jQuery Mobile调用$ .mobile.loading('hide')?

时间:2013-08-23 14:35:56

标签: jquery-mobile

我试图阻止jQuery Mobile在调用changePage时隐藏加载微调器。

程序流程如下所示,从单击链接开始,其链接事件的click事件定义如下:

$('body').delegate('.library-link', 'click',  function() {
    $.mobile.loading( 'show' );
    $.mobile.changePage($('#page-library'));
    return false;
});

单击链接后,将触发pagebeforeshow事件,触发从本地存储填充页面的功能,或者进行ajax调用以获取数据。

$(document).on('pagebeforeshow', '#page-library', function(event){
   ui.populate_data(); 
});

ui.populate_data()中,我们从本地存储中获取数据或进行ajax调用。

ui.populate_data = function() {
    if (localdata) {
        // populate some ui on the page
        $.mobile.loading( 'hide' );
    } else {
        // make an ajax call
    }
};

如果数据存在,我们将数据加载到容器中并隐藏加载微调器。如果没有,则进行ajax调用,完成时将数据保存在本地存储中,并调用ui.populate_data()

问题是,在pagebeforeshow事件完成后,changePage正在调用$.mobile.loading( 'hide' ),即使数据可能尚未存在。我找不到任何方法来阻止changePage隐藏微调器,除了暂时重新定义$.mobile.loading,这感觉非常错误:

$('body').delegate('.library-link', 'click',  function() {
    $.mobile.loading( 'show' );
    loading_fn = $.mobile.loading;
    $.mobile.loading = function() { return; };
    $.mobile.changePage($('#page-library'), {showLoadMsg: false});
    return false;
});

并且在我的ui函数中隐藏微调器之前:

ui.populate_data = function() {
    if (localdata) {
        // populate some ui on the page
        if (typeof loading_fn === 'function') {
            $.mobile.loading = loading_fn;
        }
        $.mobile.loading( 'hide' );
    } else {
        // make an ajax call
    }
};

当然必须有办法完全控制加载小部件的显示和隐藏,但我找不到它。我尝试将{showLoadMsg: false}传递给changePage,但是正如文档所建议的那样,它只会在通过ajax加载页面时执行操作,我不会这样做。

1 个答案:

答案 0 :(得分:1)

对许多人来说,这可能太过分了,但我找到了一个解决方案中写的解决方案以外的解决方案(对我来说没有用)。

我使用jquery mobile router并在' show'页面的事件,我做$.mobile.loading("show");,所以当页面出现时,它与加载微调器显示。

虽然为了隐藏微调器,我不得不使用$('.ui-loader').hide();,这很奇怪,我知道......

我使用Jquery Mobile Router做了很多,但它解决了这个问题。

(也许只是听正确的事件并触发微调器也会起作用,因为这就是JQMR所做的......)

我正在使用JQM 1.4.2 ......