Imaginons pour l'exemple l'event perso suivant :

package com.phiphou.events
{
	import flash.events.Event;
 
	public class myTestEvent extends Event
	{
		
		public function myTestEvent( type:String, isValid:Boolean=false )
		{
			super(type);
			this.isValid = isValid;
		}
		
		public var isValid:Boolean;
 
	}
}

Pour l'utiliser, nous ferions par exemple :

//On dispatche l'event
dispatchEvent(new myTestEvent("test"));

Et nous le récupérerions comme ceci :

addEventListener("test",callBack);
 
public function callBack(evt:myTestEvent):void{
     trace(evt.type);
}

Tout ceci fonctionne, mais pose un problème. Imaginons que nous fassions une erreur de frappe, et que nous écrivions :

addEventListener("test2",callBack);
 
public function callBack(evt:myTestEvent):void{
     trace(evt.type);
}

Ce code ne génèrera aucune erreur, ni à la compilation ni à l'exécution, et pourtant, il ne fonctionnera pas. En effet, nous dispatchons un event "test" et écoutons un event "test2" qui n'arrivera jamais. Il faudra peut-être pas mal de temps pour trouver d'où vient l'erreur.

C'est pourquoi une autre méthode existe : la voici

Notre Event:

package com.phiphou.events
{
	import flash.events.Event;
 
	public class myTestEvent extends Event
	{
		
		public function myTestEvent( type:String, isValid:Boolean=false )
		{
			super(type);
			this.isValid = isValid;
		}
		
		public var isValid:Boolean;
		
		public static const TEST_EVENT:String = "test";
       
	}
}

Pour le dispacher:

[Event(name="test", type="events.myEvent")]
   
dispatchEvent(new myTestEvent(myTestEvent.TEST_EVENT));

Et pour l'écouter:

pop.addEventListener(myTestEvent.TEST_EVENT,callBack)
		
public function callBack(evt:myTestEvent):void{
     trace(evt.type);
}

Avec cette méthode, plus d'erreurs possibles, notamment grâce à l'"intellisens" ou "autocompletion" qui nous propose désormais TEST_EVENT à la frappe. Que demander de plus... :)