Clint, This is kind of a bad practice. If you would consider it, I would prefer to see an event fired which can be listened for in the main application. That would make it very reusable and cleaner IMO.
Mike --- In [email protected], "Clint Tredway" <[EMAIL PROTECTED]> wrote: > > 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 >
