0

在Sencha Touch 2中有导航视图时双击快速按钮会在某些Android设备上将新视图推送到视图堆栈上两次,如何解决?不会发生在 iPhone 上

4

2 回答 2

2

如果您在单击时遇到问题,则将事件函数包装在延迟任务中......例如:

tap: function(button, e, eOpts) {
    if(this.delayedTask == null){            
        this.delayedTask = Ext.create('Ext.util.DelayedTask', function() {
            this.myFunctionToCall();
            this.delayedTask = null;
        }, this);
        this.delayedTask.delay(500);
    }
}

所以在上面的例子中,如果另一个点击被注册并且 this.delayedTask 还没有为空,那么它不会创建新的延迟任务,它最终会在 500 毫秒后调用你需要的任何函数......希望这是有道理的,它也是一种在按钮上创建双击事件的方法...

于 2012-12-07T17:58:24.790 回答
0

这个问题有点老了,但我在公司正在开发的应用程序中遇到了同样的问题。当按钮绑定到 Ajax 调用时,这尤其令人沮丧。

我收回了 Jeff Wooden 的解决方案来覆盖我的应用程序中的每个按钮:

Ext.define('MyApp.override.CustomButton', {
   override : 'Ext.Button',


   doTap: function(me, e) {

       if(this.delayedTask == null){      
           this.callOverridden(arguments); 

           this.delayedTask = Ext.create('Ext.util.DelayedTask', function() {
               this.delayedTask = null;
           }, this);
           this.delayedTask.delay(500);

       } else {
           console.log("Preventing double tap"); 
       }
   }
});

它是如何工作的?

  • 每个按钮操作都会触发一个延迟任务,它将拦截按钮操作 500 毫秒,从而防止双击
  • 这适用于“tap”和“handler:”,它们都通过“doTap”方法
  • 这链接到当前按钮,因此它不会在其他按钮上回响

要使用它,只需将其添加到您的 app.js 'requires' 块中

        Ext.application({
        requires: [
            ...
            'MyApp.override.CustomButton',
            ...
             ],

有用的来源:

于 2018-04-11T11:35:49.787 回答