Here's a stripped down version (i just left in the methods that dispatch en 
event) of my Form base class that uses EventDispatcher.
This class is usually extended by other classes (in an ARP-type framework).

import mx.events.EventDispatcher;

class com.muzakdeezign.core.Form extends MovieClip {
 static var symbolName:String = "Form";
 static var symbolOwner = Object(com.muzakdeezign.core.Form);
 var className:String = "Form";
 // allow class to broadcast events
 private static var dispatcherInit = 
EventDispatcher.initialize(Object(com.muzakdeezign.core.Form.prototype));
 // mix-in from EventDispatcher
 var addEventListener:Function;
 var removeEventListener:Function;
 var dispatchEvent:Function;
 var dispatchQueue:Function;

 ////////////////////////////////////////////////////////////////////////////
 //
 // CONSTRUCTOR
 //
 ////////////////////////////////////////////////////////////////////////////

 function Form() {
  // trace("Form ::: CONSTRUCTOR");
 }

 ////////////////////////////////////////////////////////////////////////////
 //
 // PRIVATE METHODS
 //
 ////////////////////////////////////////////////////////////////////////////

 private function size():Void {
  // should be overridden by sub class
  this.dispatchEvent({type:"size"});
 }

 ////////////////////////////////////////////////////////////////////////////
 //
 // PUBLIC METHODS
 //
 ////////////////////////////////////////////////////////////////////////////

 public function move(x:Number, y:Number, noEvent:Boolean):Void {
  // trace("Form ::: move");
  // code removed...
  if (noEvent != true) {
   dispatchEvent({type:"move", oldX:oldX, oldY:oldY});
  }
 }

 public function show():Void {
  // trace("Form ::: show")
  this._visible = true;
  this.dispatchEvent({type:"reveal"});
 }

 public function hide():Void {
  // trace("FORM ::: hide")
  this._visible = false;
  this.dispatchEvent({type:"hide"});
 }
}

So assume you then have 2 classes, Application and Login both extending the 
Form class and Login is a movieclip inside Application 
(Login is a child of Application). The Application could then listen to events 
dispatched by the Login.

import com.muzakdeezign.core.Form;
import mx.utils.Delegate;
class Application extends Form {

 private var login_frm:Login;

 private function onLoad() {
    login_frm.addEventListener("show", Delegate.create(this, 
this.loginShowHandler));
    login_frm.addEventListener("hide", Delegate.create(this, 
this.loginHideHandler));
 }

 private function loginShowHandler(evt:Object):Void {
    // login is visible
 }

 private function loginHideHandler(evt:Object):Void {
    // login is hidden
 }
}

Note that the Login doesn't listen for events dispatched by the Application 
because:
- children don't listen to parents ;-)

If Application had 2 child forms (Login, SomeView), those children wouldn't 
communicate with eachother directly, but through the 
parent (Application) by dispatching events.
For instance when a user logs in, the Login form could dispatch a "loggedIn" 
event to inform the Application that a login was 
successful.
The Application would then respond to that by hiding the Login form and showing 
the SomeView form.

import com.muzakdeezign.core.Form;
import mx.utils.Delegate;

class Application extends Form {

 private var login_frm:Login;
 private var view_frm:SomeView;

 private function onLoad() {
    view_frm.hide();
    login_frm.addEventListener("loggedIn", Delegate.create(this, 
this.loginLoggedInHandler));
 }

 private function loginLoggedInHandler(evt:Object):Void {
    // login was successful
    // hide login and show other form
    login_frm.hide();
    view_frm.show();
 }
}

Does this help?

regards,
Muzak

----- Original Message ----- 
From: "Merrill, Jason" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Tuesday, April 03, 2007 6:46 PM
Subject: RE: [Flashcoders] Events for custom classes?


> Actually, I had been meaning to post again because I had lost my code
> for getting EventDispatcher working between two classes. Someone posted
> a response here and I lost it, as well as my code that was working.  if
> anyone can post again on how to get one class to dispatch a CUSTOM event
> and get another CUSTOM class to listen to that event, please post!
> Helmut and I would like to see an example.  The help docs on
> EventDispatcher are really awful, and I haven't seen a lot of stuff
> online.
>
> Jason Merrill
> Bank of America
> GT&O Learning & Leadership Development
> eTools & Multimedia Team
>


_______________________________________________
[email protected]
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com

Reply via email to