1

我正在使用 jQuery Mobile +backbone.js 来构建一个单页应用程序。

Backbone.js 用于处理路由和模板(实际上是 underscore.js 处理的),jQuery mobile 用于提供样式,并支持一些移动事件(pageshow、pagebeforeshow 等)

该应用程序完全离线工作,旨在用于平板电脑移动设备。(安卓 2.3+)

当我单击一个元素时,我使用backbone.js 路由器来获取所涉及的资源(例如/product/:id 意味着我必须显示有关具有指定id 的产品的数据)我从localStorage 获取数据(以前保存过),过滤数据,将其发送到模板以生成 html,并修改 DOM 以更新视图。

当应用程序在移动设备中运行时,在单击元素和实际反映新状态的页面之间会有一小段延迟。这不是一个可怕的问题,但我需要向用户提供一些反馈,所以我试图在用户单击某些元素时显示“页面加载”指示器,然后再更改视图状态。就在我撞墙的时候...

问题 如果我为所涉及的“单击”元素注册事件处理程序,则页面加载永远不会显示,因为在完成事件处理程序代码后,单击处理程序的默认操作发生并且视图不会重绘。使用 setTimeout 也无济于事,因为在这种情况下,计算开始并在完成后显示指标,即当页面实际上处于新状态时,因此指标要么甚至不显示,要么只是在之前短暂显示被解雇。

我已经尝试了几乎所有我能想到的解决方案:

  • 在 click/mousedown/tapdown 事件中显示指示器 -> 试过这个,但由于某种原因,有时不会触发 click 事件

路由工作正常,但是,当我添加这样的代码时:

 $(document).bind('click', function(element) {
    $.mobile.showPageLoadingMsg();
  });

然后它开始删除点击事件:显示加载指示器,但路由甚至发生。如果我不使用该代码,一切正常。

  • 使用“fastclick”代码(https://github.com/cargomedia/jquery.touchToClick)拦截点击事件并显示指标,然后手动触发元素中的点击事件:同样,有时手动触发的点击事件只是没有出现:(

有任何想法吗?我肯定错过了什么 :(

4

0 回答 0