One more thing. A custom event is not always required. Any public property on the dispatching object can be read via the target or currentTarget properties of the standard Event.
Folks will argue OOP principles about this, but the choice is yours. Tracy ________________________________ From: [email protected] [mailto:[email protected]] On Behalf Of Tracy Spratt Sent: Monday, January 05, 2009 6:56 PM To: [email protected] Subject: RE: [flexcoders] Re: why I can not dispatchEvent with creationComplete? SystemManager is the parent of Application. Set the listener on that and it will hear all events, including from Application and from pop-ups. But events propagate *up*. If you dispatch an event in a child component, its siblings will not be able to listen for it. Huh, as Josh just beat me to the punch. You could also set the listener on a reference to Application.application instead of SystemManager: creationComplete="Application.application.addEventListener(FoodEvent.FOO D_EVENT, foodEventhandler)" that will not hear events from pop-ups, though. Tracy ________________________________ From: [email protected] [mailto:[email protected]] On Behalf Of stldvd Sent: Monday, January 05, 2009 6:05 PM To: [email protected] Subject: [flexcoders] Re: why I can not dispatchEvent with creationComplete? Thanks for the help so far. In the application from which this simple sample is derived, I'm not actually in Application, so I definitely want to make them bubble (if that's the solution). I tried changing bubbles:Boolean=true but that didn't do anything. What does it mean to 'listen on the SystemManager'? --- In [email protected] <mailto:flexcoders%40yahoogroups.com> , "Josh McDonald" <dzn...@...> wrote: > > If you want to listen to events that are dispatched from Application, you > need to listen at either Application.application or (better) make them > bubble, and listen on the SystemManager. > > -Josh > > On Tue, Jan 6, 2009 at 8:58 AM, stldvd <stl...@...> wrote: > > > OK, here's a little app to demonstrate the problem. I'm sure the > > answer is obvious, but... can someone point it out? > > > > The Application and the Canvas go in the src folder; the custom event > > (FoodEvent) goes in an 'events' folder inside src. > > > > I made the canvas because I wanted the event to be heard in a > > different component from the Application itself. > > > > <?xml version="1.0" encoding="utf-8"?> > > <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml <http://www.adobe.com/2006/mxml> " > > layout="horizontal" xmlns:food = "*"> > > <mx:Script> > > <![CDATA[ > > > > import events.FoodEvent; > > > > [Bindable] > > public var food_supply:Array = [{label:"Pizza Pie", > > data:"Pizza"},{label:"Buffalo Wings", data:"Wings"}]; > > > > private function onFoodCBChange():void > > { > > var item:Object = foodCB.selectedItem; > > if(item == null) > > return; > > > > var event:FoodEvent = new FoodEvent(FoodEvent.FOOD_EVENT); > > event.selectedItemFromFoodCB = item.data; > > this.dispatchEvent(event); > > } > > ]]> > > </mx:Script> > > <mx:Canvas height="167" width="200"> > > <mx:ComboBox x="40" y="20" > > dataProvider="{food_supply}" > > id="foodCB" textAlign="left" change="onFoodCBChange()"/> > > </mx:Canvas> > > <food:testCanvas /> > > </mx:Application> > > > > <?xml version="1.0" encoding="utf-8"?> > > <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml <http://www.adobe.com/2006/mxml> " > > creationComplete="this.addEventListener(FoodEvent.FOOD_EVENT, > > foodEventhandler)" > > borderStyle="solid" borderColor="red" borderThickness="3" x="300" > > y="300" width="200" height="200"> > > <mx:Script> > > <![CDATA[ > > import events.FoodEvent; > > import mx.controls.Alert; > > > > private function foodEventhandler(e:FoodEvent):void > > { > > Alert.show(e.selectedItemFromFoodCB); > > } > > > > ]]> > > </mx:Script> > > </mx:Canvas> > > > > package events > > { > > import flash.events.Event; > > > > public class FoodEvent extends Event > > { > > > > public static const FOOD_EVENT:String = 'food.event'; > > > > public var selectedItemFromFoodCB:String; //Used to > > pass selection value > > > > public function FoodEvent(type:String, > > bubbles:Boolean=false, > > cancelable:Boolean=false) > > { > > super(type, bubbles, cancelable); > > } > > > > } > > } > > > > --- In [email protected] <mailto:flexcoders%40yahoogroups.com> , "Tracy Spratt" <tspratt@> wrote: > > > > > > It will depend on where and how the listener is declared. > > > CreationComplete fires at different times for different components. As > > > I recall, it is bottom up, so creationComplete for a parent will fire > > > after creationComplete for a child. If the parent creationComplete > > > handler declares the listener, then there would be a problem. > > > > > > > > > > > > This should only be an issue on start-up. Certainly the listener would > > > be available when the app was ready to receive user input, via ComboBox > > > or button click, as the original poster noticed. > > > > > > > > > > > > Remember that events flow through the DOM. It is possible for a > > > dispatched event to "miss" a component. Pop-ups are a particular > > > problem. > > > > > > > > > > > > Tracy > > > > > > > > > > > > ________________________________ > > > > > > From: [email protected] <mailto:flexcoders%40yahoogroups.com> [mailto:[email protected] <mailto:flexcoders%40yahoogroups.com> ] On > > > Behalf Of stldvd > > > Sent: Monday, January 05, 2009 4:48 PM > > > To: [email protected] <mailto:flexcoders%40yahoogroups.com> > > > Subject: [flexcoders] Re: why I can not dispatchEvent with > > > creationComplete? > > > > > > > > > > > > I'm having a similar issue. Event is dispatched (I can step through > > > code and see it) but the event listener is never hearing it, and so > > > the listener function is never being fired. > > > > > > How does one tell if the listener is ready or not? If you add the > > > listener on the creationcomplete or initialize event of an mxml > > > component, it should in theory be ready to fire, for the duration of > > > the app, right? And if you're dispatching a custom event when an item > > > is selected in a combobox, it should certainly work. What could be the > > > reason for a 'deaf' event listener? :) > > > > > > -- David > > > > > > --- In [email protected] <mailto:flexcoders%40yahoogroups.com> <mailto:flexcoders%40yahoogroups.com<flexcoders%2540yahoogroups.com> > > > > > > , "Tracy Spratt" <tspratt@> wrote: > > > > > > > > Perhaps the listener is not yet ready when the canvas creationComplete > > > > fires? > > > > > > > > Tracy > > > > > > > > > > > > > > > > ________________________________ > > > > > > > > From: [email protected] <mailto:flexcoders%40yahoogroups.com> <mailto:flexcoders%40yahoogroups.com<flexcoders%2540yahoogroups.com> > > > > > > [mailto:[email protected] <mailto:flexcoders%40yahoogroups.com> <mailto:flexcoders%40yahoogroups.com<flexcoders%2540yahoogroups.com> > > > > > > ] On > > > > Behalf Of markflex2007 > > > > Sent: Monday, January 05, 2009 2:08 PM > > > > To: [email protected] <mailto:flexcoders%40yahoogroups.com> <mailto:flexcoders%40yahoogroups.com<flexcoders%2540yahoogroups.com> > > > > > > > Subject: [flexcoders] why I can not dispatchEvent with > > > creationComplete? > > > > > > > > > > > > > > > > I try the following code, But I can not dispatchEvent. > > > > > > > > <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml <http://www.adobe.com/2006/mxml> > > > <http://www.adobe.com/2006/mxml <http://www.adobe.com/2006/mxml> > > > > > <http://www.adobe.com/2006/mxml <http://www.adobe.com/2006/mxml> <http://www.adobe.com/2006/mxml <http://www.adobe.com/2006/mxml> > > " > > > > creationComplete="justLogin()" > > > > > <mx:Metadata> > > > > [Event(name="loginEvent", type="flash.events.Event")] > > > > </mx:Metadata> > > > > <mx:Script> > > > > <![CDATA[ > > > > > > > > > > > > private function justLogin():void{ > > > > > > > > dispatchEvent(new Event("loginEvent", false)); > > > > > > > > } > > > > ]]> > > > > </mx:Script> > > > > > > > > </mx:Canvas> > > > > > > > > I can dispatchEvent with button click, please let me know how to > > > > automatic dispatchEvent in page start. > > > > > > > > Thanks > > > > > > > > Mark > > > > > > > > > > > > > > > ------------------------------------ > > > > -- > > Flexcoders Mailing List > > FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt <http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt> > > Alternative FAQ location: > > https://share.acrobat.com/adc/document.do?docid=942dbdc8-e469-446f-b4cf- 1e62079f6847 <https://share.acrobat.com/adc/document.do?docid=942dbdc8-e469-446f-b4cf -1e62079f6847> > > Search Archives: > > http://www.mail-archive.com/flexcoders%40yahoogroups.comYahoo <http://www.mail-archive.com/flexcoders%40yahoogroups.comYahoo> ! Groups > > Links > > > > > > > > > > > -- > "Therefore, send not to know For whom the bell tolls. It tolls for thee." > > Like the cut of my jib? Check out my Flex blog! > > :: Josh 'G-Funk' McDonald > :: 0437 221 380 :: j...@... > :: http://flex.joshmcdonald.info/ <http://flex.joshmcdonald.info/> > :: http://twitter.com/sophistifunk <http://twitter.com/sophistifunk> >

