javascript:在调度click事件之前执行代码

时间:2012-09-20 10:36:17

标签: javascript jquery-mobile backbone.js

我正在使用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也没有帮助,因为在这种情况下计算开始并且指示符在它们完成后显示,即当页面实际处于新状态时,因此指示器要么甚至不显示,要么只显示之前被解雇。

我几乎尝试了任何解决方案:

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

路由工作正常,但是,我添加这样的代码的那一刻:

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

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

  • 使用“快速点击”代码 (https://github.com/cargomedia/jquery.touchToClick)拦截 单击事件并显示指示符,然后触发单击事件 在元素中手动:再次,有时手动触发 点击事件只是没有显示:(

有什么想法吗?我必须遗漏一些东西:(

0 个答案:

没有答案