我目前正在使用绘图API的绘图工具,每次双击鼠标时,地图服务都会执行测量并显示我正在绘制的线的长度。
我想通过调度MouseEvent.DOUBLE_CLICK手动模仿此双击,但地图服务未侦听此默认Flex事件。我怀疑API已经创建了一个自定义MapMouseEvent或类似于用户双击鼠标时调度的东西。
当我双击鼠标时,有没有办法确定调度哪个事件?
答案 0 :(得分:0)
API不一定要调度自己的事件。即使它是,它必须首先监听MouseEvents。可以使用MouseEvent.DOUBLE_CLICK
或通过收听连续的MouseEvent.CLICK
或MouseEvent.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 )
}