我有一个adobe flex datagrid,其中一个列中有一个简单的自定义标签itemrenderer。单击itemrenderer会触发cairngorm事件,这会导致进行服务调用,并且来自服务调用的数据将填充TitleWindow。
尽管我已将doubleClickedEnabled属性设置为false,但仍有时可以双击项呈示器,从而导致进行两次服务调用,并显示两个TitleWindows。在其他情况下,三次点击似乎也会触发不需要的结果。
有什么方法可以防止这种行为吗?
答案 0 :(得分:2)
跟踪您何时获得点击事件,如果您在一定时间内(250毫秒)获得两个,请忽略第二个。
var lastTime:Date = new Date(0);
function OnClickHandler(event:Event):void {
if ((new Date()).time - lastTime.time < 250) {
return;
}
lastTime = new Date();
...
}
答案 1 :(得分:2)
好的,我知道这是旧的,但防止双击事件的最简单方法是为按钮设置doubleClickEnabled = "true"
并且不为doubleClick事件分配任何功能。因此,该按钮可识别第二次单击,但不会发送单击事件。希望它有意义 - 我已经测试了这个并且适合我:)
答案 2 :(得分:0)
// class variable section
var lastTime:Date = null;
...
function handler(evt:Event):void{
var currentTime = new Date();
if (lastTime === null){
lastTime = currentTime;
} else {
var diff = currentTime.milliseconds() - lastTime.milliseconds();
if (diff <= 250) // try some other intervals to get best result for you.
return;
else
lastTime = currentTime;
}
... the rest of your code.
}
答案 3 :(得分:0)
执行此操作的最佳方法是在itemRenderer中设置一个标记,以便注意它已被单击一次。这可以防止它返回另一个cairngorm事件,直到返回第一个结果为止,此时你重置了标志,使其再次被点击。
为简洁起见,以下代码假定一切都在同一范围内发生。如果不是,您将不得不从其他上下文向itemRender发送和接收事件。
[Bindable]
var _clickEnabled:Boolean = true;
private function doClickStuff() : void {
if (_clickEnabled) {
// fire your event
_clickEnabled = false;
}
}
private function onEventReturnHandler(event:Event) : void {
// do whatever it is you're going to do
_clickEnabled = true;
}
答案 4 :(得分:0)
一个更简单的解决方案,可以防止双击发送两个服务调用是启用双击并让双击事件调用与单击事件相同的处理程序。
<s:Button label="Button"
click="clickHandler()"
doubleClick="clickHandler()"
doubleClickEnabled="true" />
当然,这不会阻止三次点击,但这是一个不太常见的问题。