Created
October 19, 2013 16:50
-
-
Save k0t0vich/7058378 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import flash.events.Event; | |
| import flash.utils.Format; | |
| /** | |
| * EventDispatcher class. Provides a basic AS3 EventDispatcher | |
| * functionality. | |
| * @author k0t0vich | |
| */ | |
| class flash.events.EventDispatcher | |
| { | |
| public var className:String = "EventDispatcher"; | |
| private var _eventListeners:Array; | |
| /** | |
| * Ссылка на родителя - диспетчера | |
| */ | |
| public var eventParent=null; | |
| /** | |
| * Constructor. Creates new EventDispatcher instance. | |
| */ | |
| public function EventDispatcher(eventParentLink) | |
| { | |
| super(); | |
| eventParent = eventParentLink; | |
| _eventListeners = []; | |
| } | |
| /** | |
| * Adds listener Function for the specified Event. | |
| * @param event String. Event to listen to. | |
| * @param listener Function. The listening function. | |
| * @param scope Object. Listener's scope object. | |
| */ | |
| public function addEventListener(event:String,listener:Function, scope:Object):Void | |
| { | |
| trace("EventDispatcher.addEventListener > event : " + event + ", listener : " + listener + ", scope : " + scope); | |
| if (scope==undefined) scope = this; | |
| var i:Number; | |
| var l:Number = _eventListeners.length; | |
| var obj:Object; | |
| for (i = 0; i < l; i++) | |
| { | |
| obj = _eventListeners[i]; | |
| if (obj.e == event && obj.f == listener && | |
| obj.o == scope) return; | |
| } | |
| _eventListeners.push( { e:event, f:listener, o:scope } ); | |
| } | |
| /** | |
| * Unregisters listener Function for the specified Event. | |
| * @param event String. Event to be unregistered from. | |
| * @param fn Function. The listening function. | |
| * @param ob Object. Listener's scope object. | |
| */ | |
| public function removeEventListener(event:String, listener:Function, scope:Object):Function | |
| { | |
| trace("EventDispatcher.removeEventListener > event : " + event + ", listener : " + listener + ", scope : " + scope); | |
| if (scope==undefined) scope = this; | |
| var i:Number; | |
| var l:Number = _eventListeners.length; | |
| var obj:Object; | |
| for (i = 0; i < l; i++) | |
| { | |
| obj = _eventListeners[i]; | |
| if (obj.e != event) continue; | |
| if (obj.f != listener) continue; | |
| if (obj.o != scope) continue; | |
| return _eventListeners.splice(i, 1)[0].f; | |
| } | |
| return null; | |
| } | |
| /** | |
| * Invokes all event-listener functions with the specified Event. | |
| * @param event Event. The event-object to be passed to the listening function. | |
| */ | |
| public function dispatchEvent(event:Event):Void | |
| { | |
| trace("EventDispatcher.dispatchEvent > event : " + event); | |
| event.currentTarget = this; | |
| //trace("EventDispatcher.dispatchEvent > event : " + event); | |
| ////trace (this + ".dispatchEvent" + event); | |
| var i:Number = 0; | |
| var l:Number = _eventListeners.length; | |
| // тут нужно всё время длину брать,т.к. она может изменится в процессе.. например отписка от события одного клика.. | |
| //for (i = 0; i < l; i++) | |
| for (i = 0; i < _eventListeners.length; i++) | |
| { | |
| if (event.type != _eventListeners[i].e) continue; | |
| _eventListeners[i].f.apply(_eventListeners[i].o, [event.clone()]); | |
| } | |
| dispatchBubblesEvent(event); | |
| delete event; | |
| } | |
| // всплытие событий | |
| public function dispatchBubblesEvent(event:Event):Void | |
| { | |
| trace("EventDispatcher.dispatchBubblesEvent > event : " + event); | |
| //trace("EventDispatcher.dispatchBubblesEvent > event : "+ this["eventParent"]+" "+ event); | |
| if (event.bubbles && this["eventParent"].dispatchEvent) | |
| { | |
| var bubblesEvent:Event = event.clone(); | |
| bubblesEvent.target = this["eventParent"]; | |
| this["eventParent"].dispatchEvent(bubblesEvent); | |
| } | |
| delete event; | |
| } | |
| public function toString():String | |
| { | |
| return Format.formatToString(this); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment