2013-01-04 88 views
1

经过很多google'ing和阅读论坛,我还没有找到合适的答案。jQuery Mobile Binding Spinner To ChangePage

到目前为止,所有我所发现的是类似下面的东西:

  • 显示加载消息
  • 呼叫改变页面
  • 隐藏加载消息

这会工作,但我将不得不每次我调用加载/更改页面(这是很多)时都要这样做。

这会使我要么做一个中间人功能象下面这样:

function customLoader(url){ 
    showLoader(); 
    $.mobile.changePage(url); 
    hideLoader(); 
} 

反正它绑定到改变页面的事件吗? 因此,它显示了从第二changePage被称为却隐藏着一旦changePage是了......

我知道上面的中间人方法的工作,但希望更多的东西整洁,更好实施,因为有很多的HTML/js文件。

感谢

回答

3

事情是这样的:

$('#index').live('pagebeforeshow',function(e,data){  
    $('#test-button').live('click', function(e) { 
     $.mobile.showPageLoadingMsg(true); 
     setTimeout(function() { 
      $.mobile.changePage('#second'); 
     }, 1000); 
    });  
}); 

$("#second").live('pageshow', function() { 
    $.mobile.hidePageLoadingMsg(); 
}); 

超时只有在这里,所以你可以看到它的工作顺利。这是一个很好的例子,所以过渡很快就被解雇了。在你的真实代码中删除它。

而且这里有一个例子:http://jsfiddle.net/Gajotres/arrHd/

的每次改变页面事件周期有活动时,一个页面一个被过渡到一个页面B.无论使用哪个动作触发改变页面,您可以始终存在的一个秩序当页面B成功加载时禁用它。如果您想了解更多关于页面加载顺序的信息,请查看此链接:https://stackoverflow.com/a/14010308/1848600。在那里你会发现很多关于jQM页面动态的信息。

如果你想实现这个到每一页过渡使用此:

$('[data-role="page"]').live('pageshow', function() { 
    $.mobile.hidePageLoadingMsg(); 
}); 

这将隐藏的AJAX加载程序(如果它是打开的)每一个不同的页面加载成功和显示的时间。

1

也许这对很多人来说太多了,但是我发现了一个与this question的评论不同的解决方案。

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

我使用JQuery的移动路由器了很多,但它解决了这个问题。

虽然隐藏旋转,我不得不使用$('.ui-loader').hide();,这是不可思议的,我知道...

(也许只是听正确的事件和触发的微调也将工作,因为这是JQMR不...)

我使用JQM 1.4.2 ...