robertpenner edited this page Sep 13, 2010 · 11 revisions

Signals have many features not available from Flash’s EventDispatcher.

  • Remove all event listeners:
  • Retrieve the number of listeners:
    trace( signal.numListeners );
  • Listeners can be added for a one-time call and removed automatically on dispatch:
    signal.addOnce(theListener); // result: signal has one listener
    signal.dispatch(theEvent);   // result: theListener is called, signal now has no listeners
  • Any object type can be dispatched to listeners; no flash.events.Event restriction.
  • You can dispatch your value objects themselves and avoid creating so many Event subclasses.
  • Any number of arguments can be dispatched to listeners, from zero to many.
  • A Signal can be initialized with value classes that will validate value objects on dispatch (optional):
    // A Signal that will dispatch a String and an integer:
    progress = new Signal(String, int);
    progress.dispatch(); // will throw ArgumentError 
    progress.dispatch('The Answer'); // will throw ArgumentError 
    progress.dispatch('The Answer', 42.5); // will throw ArgumentError 
    progress.dispatch('The Answer', 42); // will succeed
  • If the Signal has any value classes specified, each listener is checked on `add()` to ensure it declares enough arguments for the value objects.
  • Signals can be placed in interfaces to indicate the events dispatched by a class.
  • Events can bubble recursively through `.parent` independent of the display list (experimental).