추가해야할 이벤트는 많으면서 또 짐작하기 어렵고.. 시간이 없으니.. 일단 정리를 하여.. 추후 까막까막해져 혼란이 없으면 하는 바램에서 사용자 정의 이벤트를 추가하는 방법에 대해 정리를 해봅니다..
먼저 이벤트 처리 함수(이벤트 핸들러 함수)로 전달될 객체에 대한 클래스를 정의합니다.. 아래는 예입니다..
package geoservice.events { import flash.events.Event; import flash.events.MouseEvent; public class XrMapMouseEvent extends Event { public static const XRMAP_MOUSE_DOWN_EVENT:String = "mapMouseDownEvent"; public static const XRMAP_MOUSE_UP_EVENT:String = "mapMouseUpEvent"; public static const XRMAP_MOUSE_CLICK_EVENT:String = "mapMouseClickEvent"; public static const XRMAP_MOUSE_DBLCLICK_EVENT:String = "mapMouseDblClickEvent"; public static const XRMAP_MOUSE_MOVE_EVENT:String = "mapMouseMoveEvent"; public var mapX:Number; public var mapY:Number; public var mouseEvent:MouseEvent; public function XrMapMouseEvent(type:String, mouseEvent:MouseEvent, mapX:Number, mapY:Number, bubbles:Boolean=false, cancelable:Boolean=false) { super(type, bubbles, cancelable); this.mapX = mapX; this.mapY = mapY; this.mouseEvent = mouseEvent; } override public function clone():Event { return new XrMapMouseEvent(type, mouseEvent, mapX, mapY, bubbles, cancelable); } } }
하나의 이벤트 클래스에서 총 5개 종류의 이벤트를 책임지고 있습니다.. 만약 클래스 하나가 단 하나의 이벤트만을 책임진다면 생성자에서 type 인자는 필요치 않고 super를 호출할때 첫번째 인자 를 바로 값으로 지정해 주면 됩니다.
다음으로 이벤트를 발생시켜 주는 코드입니다..
parent.dispatchEvent( new XrMapMouseEvent(XrMapMouseEvent.XRMAP_MOUSE_DOWN_EVENT, e, coordMapper.V2W_X(mouseX), coordMapper.V2W_Y(mouseY) ) );
이벤트가 발생되는 적절한 위치에 위의 코드가 존재하면 되며.. 위의 코드는 XRMAP_MOUSE_DOWN_EVENT라는 한 종류의 이벤트를 발생시키는 코드입니다..
이제 마크업(MXML)쪽에서 이벤트를 인식하도록 하기 위한 메타 태그의 정의를 추가합니다..
[Event(name="mapMouseDownEvent", type="geoservice.events.XrMapMouseEvent")] [Event(name="mapMouseUpEvent", type="geoservice.events.XrMapMouseEvent")] [Event(name="mapMouseClickEvent", type="geoservice.events.XrMapMouseEvent")] [Event(name="mapMouseDblClickEvent", type="geoservice.events.XrMapMouseEvent")] [Event(name="mapMouseMoveEvent", type="geoservice.events.XrMapMouseEvent")] public class XrMap extends UIComponent { ....
여기까지가 사용자 정의 이벤트를 추가하기 위한 전부이고.. 다음은 이 사용하는 쪽의 코드입니다.. addEventListener를 사용해 이벤트를 추가해도 되고.. 아니면 마크업쪽에서 이벤트를 추가해도 됩니다..
마크업 쪽의 방법만을 살펴보면 다음과 같습니다.. 흔히 일반적인 컴포넌트에 대한 이벤트를 정의하는 것과 동일합니다..
mapMouseDownEvent="map_mapMouseDownEventHandler(event)" mapMouseClickEvent="map_mapMouseClickEventHandler(event)" mapMouseDblClickEvent="map_mapMouseDblClickEventHandler(event)" mapMouseMoveEvent="map_mapMouseMoveEventHandler(event)" mapMouseUpEvent="map_mapMouseUpEventHandler(event)"/>