我试图阻止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加载页面时执行操作,我不会这样做。
答案 0 :(得分:1)
对许多人来说,这可能太过分了,但我找到了一个解决方案中写的解决方案以外的解决方案(对我来说没有用)。
我使用jquery mobile router并在' show'页面的事件,我做$.mobile.loading("show");
,所以当页面出现时,它与加载微调器显示。
虽然为了隐藏微调器,我不得不使用$('.ui-loader').hide();
,这很奇怪,我知道......
我使用Jquery Mobile Router做了很多,但它解决了这个问题。
(也许只是听正确的事件并触发微调器也会起作用,因为这就是JQMR所做的......)
我正在使用JQM 1.4.2 ......