Flex: Event Bubbling Example
A refactor it gave me a chance to update the way I handled events. This page on Adobe's site explains the event bubbling model. To give a brief overview there are three phases: Capture, Targeting and Bubbling. The Capture phase will pass through each branch of a DisplayObject tree until it reaches the last node. The Targeting phase will look for objects that have event listeners bound to them. The Bubbling phase ascends the DisplayObject tree from the last node to the first node and activates the event listeners. Only DisplayObjects have a Capture and Bubbling phase.
Here is some example code I made in MXML that shows how event bubbling works. There are four files. The Application file includes Layer1. Layer1 includes Layer2. Layer2 includes Layer3. When Layer3 is created it will throw an event. The first property of the event is the string that will trigger event listeners, the second allows the event to bubble through the DisplayObject tree. The third allows the event to be canceled at any of the DisplayObjects it passes through. The event will bubble through each DisplayObject and back to the Application without manually passing it forward.
UPDATE
If you're looking for an example of event bubbling in ActionScript please view this article.
index.mxml
Layer1.mxml
Layer2.mxml
Layer3.mxml
You can download the Flex Project Archive example here. This can be directly imported into Flex. Run it in debug mode to see how each level is triggered.
Here is some example code I made in MXML that shows how event bubbling works. There are four files. The Application file includes Layer1. Layer1 includes Layer2. Layer2 includes Layer3. When Layer3 is created it will throw an event. The first property of the event is the string that will trigger event listeners, the second allows the event to bubble through the DisplayObject tree. The third allows the event to be canceled at any of the DisplayObjects it passes through. The event will bubble through each DisplayObject and back to the Application without manually passing it forward.
UPDATE
If you're looking for an example of event bubbling in ActionScript please view this article.
index.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="init()" styleName="plain">
<mx:Script>
<![CDATA[
import obj.Level3;
import obj.Level1;
private var _level1:Level1;
private function init() : void {
trace("in the base");
_level1 = new Level1;
//add eventListener
_level1.addEventListener(Level3.EVENT,onEvent);
addChild(_level1);
}
private function onEvent(event:Event) : void {
trace("picked up event from Level3 ");
}
]]>
</mx:Script>
</mx:Application>
Layer1.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300" initialize="init()">
<mx:Script>
<![CDATA[
private var _level2:Level2;
private function init() : void {
trace("in level 1");
_level2 = new Level2;
addChild(_level2);
}
]]>
</mx:Script>
</mx:Canvas>
Layer2.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300" initialize="init()">
<mx:Script>
<![CDATA[
private var _level3:Level3;
private function init() : void {
trace("in level 2");
_level3 = new Level3;
addChild(_level3);
}
]]>
</mx:Script>
</mx:Canvas>
Layer3.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300" initialize="init()">
<mx:Script>
<![CDATA[
public static const EVENT:String = "level3";
private function init(): void {
trace("in level 3");
var event:Event = new Event(EVENT,true,true);
dispatchEvent(event);
}
]]>
</mx:Script>
</mx:Canvas>
You can download the Flex Project Archive example here. This can be directly imported into Flex. Run it in debug mode to see how each level is triggered.
Labels: bubbling, capture, display, displayobject, event, eventbubbling, events, flex, listener, mxml, object, targeting

