调试双击鼠标时调度哪个事件

时间:2011-05-13 19:46:06

标签: flex actionscript-3 gis mouseevent dispatch

我目前正在使用绘图API的绘图工具,每次双击鼠标时,地图服务都会执行测量并显示我正在绘制的线的长度。

我想通过调度MouseEvent.DOUBLE_CLICK手动模仿此双击,但地图服务未侦听此默认Flex事件。我怀疑API已经创建了一个自定义MapMouseEvent或类似于用户双击鼠标时调度的东西。

当我双击鼠标时,有没有办法确定调度哪个事件?

2 个答案:

答案 0 :(得分:0)

API不一定要调度自己的事件。即使它是,它必须首先监听MouseEvents。可以使用MouseEvent.DOUBLE_CLICK或通过收听连续的MouseEvent.CLICKMouseEvent.MOUSE_DOWN事件来检测双击。没有办法(仅在Flash中)检测双击而不在某处侦听一个或多个事件。

地图服务也可能正在侦听DOUBLE_CLICK事件,但您没有从正确的对象调度MouseEvent。例如,如果地图服务执行此操作:

mapRoot.mapChild.addEventListener(MouseEvent.DOUBLE_CLICK, performMeasurement);

你这样做:

mapRoot.dispatchEvent(new MouseEvent(MouseEvent.DOUBLE_CLICK));
什么都不会发生。

还有其他可能性:
当您使用鼠标实际执行双击时,将导致调度多个事件: MOUSE_DOWN,MOUSE_UP,CLICK,MOUSE_DOWN,MOUSE_UP,CLICK,DOUBLE_CLICK

地图服务可能会侦听MOUSE_DOWN,并在MOUSE_DOWN处理程序中添加DOUBLE_CLICK侦听器,如下所示:

mapRoot.addEventListener(MouseEvent.MOUSE_DOWN, _mouseDownHandler);

private function _mouseDownHandler(event:MouseEvent):void
{
    var targ:InteractiveObject = event.target as InteractiveObject;
    targ.addEventListener(MouseEvent.DOUBLE_CLICK, _doubleClickHandler);
}

private function _doubleClickHandler(event:MouseEvent):void
{
    var targ:InteractiveObject = event.target as InteractiveObject;
    targ.removeEventListener(MouseEVent.DOUBLE_CLICK, doubleClickHandler);
    performMeasurement();
}

因此,您实际上可能需要调度事件组合来触发处理程序。


您可以尝试以下操作:

使用DisplayObjectContainer.getObjectsUnderPoint()获取可能响应点击的所有对象的数组。然后,从该数组中的每个对象,尝试调度各种MouseEvents序列,直到您从正确的对象中找到正确的事件。

请注意,如果 areInaccessibleObjectsUnderPoint()对于您测试的点返回true,然后有一些对象无法访问,如果这些是地图服务正在侦听的对象,那么您运气不好。

答案 1 :(得分:-2)

public function cbMouseEvents( e:MouseEvent ):void{
    trace( e.type )
}