I got it to work. thanks for the insight Alex. On 3/30/07, Alex Harui <[EMAIL PROTECTED]> wrote:
Post the code for both the component and test app ------------------------------ *From:* [email protected] [mailto:flexcompone [EMAIL PROTECTED] *On Behalf Of *Clint Tredway *Sent:* Friday, March 30, 2007 12:33 PM *To:* [email protected] *Subject:* Re: [flexcomponents] passing a function into a component I have the changes that Alex suggested but my main app doesnt 'see' the event firing. On 3/30/07, Clint Tredway < [EMAIL PROTECTED]> wrote: > Thanks Alex, the runUpdate is a special case for the current use, its > not for *general use* and it would come out if/when I would share this > component. > > I originally had the timerTimedOut not attached to the timer itself and > I was trying to track down an issue and attaching it to the timer was part > of that process. > > Thanks again. This is my first, what I consider *real* component so I am > learning as I go. I made the changes you described and the *light bulb* has > shown. > > Thanks Alex. > > > On 30 Mar 2007 10:14:07 -0700, Alex Harui <[EMAIL PROTECTED]> wrote: > > > > Clint, > > > > I didn't bother to run this, so I could be wrong. > > > > First, an unsolicited comment: If I were in your shoes I would extend > > UIComponent and have a child Label or UITextField. I don't think you want > > to extend Text because to me this isn't a Text component. Your > > CountDownTImer probably doesn't need to support htmlText, multiline text, > > etc. > > > > Now to your question. IMHO, you want to dispatch "timerTimedOut" from > > the component and not the internal timer, so it would be > > > > public function timerEnd(event:TimerEvent):void{ > > trace("timer ended"); > > if(minutes == 0 && seconds == 0){ > > text = "0:00"; > > dispatchEvent(new Event("timerTimedOut")); > > return; > > } > > startTimer(); > > } > > Then you need metadata on the component to advertise that you dispatch > > such an event when done. That would look like this: > > > > package > > { > > import mx.controls.Text; > > import flash.utils.Timer; > > import flash.events.TimerEvent; > > import mx.utils.ObjectUtil; > > import flash.events.Event; > > > > /** > > * Dispatched when the content is scrolled. > > * > > */ > > [Event(name="timerTimedOut", type="flash.events.Event")] > > public class CountDownTimer extends Text{ > > public var minutes:Number=1; > > public var seconds:Number=59; > > Finally, you would no longer need to > > addEventListener("timerTimedOut"...) in startTimer as you should simply call > > timedOutListener before you dispatch the event. Once you are set up like > > this folks do not pass you a function to call back, they simply add > > themselves as listeners for the event. That way more than one person can > > get called back via the event listeners and it is one less thing to code. > > > > To be really picky, I see a call to parentDocument.runUpdate. That > > requires that everyone who uses this component have such a callback. It > > would be much better to use a custom event there. > > > > ------------------------------ > > *From:* [email protected] [mailto:[EMAIL PROTECTED] > > *On Behalf Of *Clint Tredway > > *Sent:* Friday, March 30, 2007 9:40 AM > > *To:* [email protected] > > *Subject:* [flexcomponents] passing a function into a component > > > > Hey all, I am stumped. I am trying to make my CountDownTimer > > component > > as reusable as I can and I am stumped on how to pass a function > > reference to it. > > > > Here is what I want to do: > > > > when the timer finally reaches the end, I want to fire a function that > > is in the parent document so I can use my logic for when this event > > occurs. > > > > I have my custom event all registered and it fires when its supposed > > to, but how the heck do I reference this outside function? > > > > ****************** CODE BELOW ******************************** > > > > package > > { > > import mx.controls.Text; > > import flash.utils.Timer; > > import flash.events.TimerEvent; > > import mx.utils.ObjectUtil; > > import flash.events.Event; > > > > public class CountDownTimer extends Text{ > > public var minutes:Number=1; > > public var seconds:Number=59; > > public var timedOut:Function; > > private var minuteDisplay:Number=minutes-1; > > private var zero:String=""; > > private var newTimer:Timer; > > > > public function CountDownTimer(){ > > super(); > > } > > > > private function onTick(event:TimerEvent):String{ > > seconds--; > > if(seconds < 10){ > > zero = "0"; > > } else { > > zero = ""; > > } > > > > if(seconds == 30 || seconds == 0){ > > var n:Number; > > var m:Number; > > if(seconds == 0){ > > n=59; > > } else { > > n=30; > > } > > > > if(minutes != 0 && seconds != 30){ > > m=minutes-1; > > } else { > > m=minutes; > > } > > > > parentDocument.runUpdate(minutes,seconds); > > } > > > > text = minutes + ":" + zero + seconds; > > return text; > > } > > > > public function timerEnd(event:TimerEvent):void{ > > trace("timer ended"); > > if(minutes == 0 && seconds == 0){ > > text = "0:00"; > > newTimer.dispatchEvent(new Event("timerTimedOut")); > > return; > > } > > startTimer(); > > } > > > > public function startTimer():void{ > > if(seconds == 0){ > > seconds=59; > > } else { > > seconds = seconds; > > } > > minutes--; > > newTimer = new Timer(1000,seconds); > > newTimer.addEventListener(TimerEvent.TIMER_COMPLETE,timerEnd); > > newTimer.addEventListener(TimerEvent.TIMER, onTick); > > newTimer.addEventListener("timerTimedOut",timedOutListener); > > newTimer.start(); > > trace("timer started"); > > } > > > > public function stopTimer():void{ > > newTimer.stop(); > > trace("timer stopped"); > > } > > > > private function timedOutListener(eventObj:Event):void{ > > trace("Timed out listener fired"); > > stopTimer(); > > //this is where I need to call the passed in function > > //timedOut(); > > } > > } > > } > > > > thanks for any help! > > -- > > I am not a diabetic, I have diabetes > > my blog - http://grumpee.instantspot.com/blog > > > > > > > -- > I am not a diabetic, I have diabetes > my blog - http://grumpee.instantspot.com/blog > -- I am not a diabetic, I have diabetes my blog - http://grumpee.instantspot.com/blog
-- I am not a diabetic, I have diabetes my blog - http://grumpee.instantspot.com/blog
