我正在使用jQuery Mobile + backbone.js构建一个单页应用程序。
Backbone.js用于处理路由和模板(实际上是underscore.js处理),jQuery mobile用于提供样式,并支持某些移动事件(pageshow,pagebeforeshow等)
该应用程序完全脱机工作,旨在用于平板电脑移动设备。 (Android 2.3 +)
当我点击一个元素时,我使用backbone.js路由器来获取所涉及的资源(例如/ product /:id表示我必须显示有关具有指定id的产品的数据) 我从localStorage获取数据(之前已保存),过滤数据,将其发送到模板以生成html,并修改DOM以更新视图。
当应用在移动设备中运行时,点击元素和实际反映新状态的页面之间会有一点延迟。 这不是一个可怕的问题,但我需要向用户提供一些反馈,所以我试图在用户点击某些元素之前显示“页面加载”指示符,然后再更改视图状态。那是我撞墙的时候......
问题 如果我为所涉及的“click”元素注册事件处理程序,则页面加载永远不会显示,因为在完成事件处理程序代码之后,将发生单击处理程序的默认操作,并且不会重绘视图。 使用setTimeout也没有帮助,因为在这种情况下计算开始并且指示符在它们完成后显示,即当页面实际处于新状态时,因此指示器要么甚至不显示,要么只显示之前被解雇。
我几乎尝试了任何解决方案:
路由工作正常,但是,我添加这样的代码的那一刻:
$(document).bind('click', function(element) {
$.mobile.showPageLoadingMsg();
});
然后它开始删除点击事件:显示加载指示符,但路由甚至发生。 如果我不使用该代码,一切正常。
有什么想法吗?我必须遗漏一些东西:(