在Sencha Touch 2中有导航视图时双击快速按钮会在某些Android设备上将新视图推送到视图堆栈上两次,如何解决?不会发生在 iPhone 上
问问题
650 次
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 回答