双击应用程序内的按钮可能会导致UI损坏

时间:2012-12-07 05:31:55

标签: sencha-touch-2

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

2 个答案:

答案 0 :(得分: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);
    }
}

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

答案 1 :(得分: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"); 
       }
   }
});

它是如何运作的?

  • 每个按钮动作都会触发一个delayedTask,它会截取500秒的按钮动作,因此会阻止双击
  • 这适用于'tap'和'handler:',它们都通过'doTap'方法
  • 这与当前按钮相关联,因此不会在其他按钮上产生混响

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

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

有用的资料来源: