Flex Tips – Le Metatag Event pour déclarer la propagation d'un évènement par un composant AS / MXML
Après le Metatag DefaultProperty, très utile pour les composants instanciés en MXML, voici une autre astuce que vous devez absolument connaître si vous développez des composants Flex personnalisés. Ce metatag permet d'indiquer au compilateur que votre classe va propager (dispatch) un évènement. Ce n'est pas une étape obligatoire, si vous faîtes un dispatchEvent() dans votre composant, votre évènement sera toujours propagé.
Le principal avantage qu'il apport est un confort de développement, puisque Flex Builder va faire de l'auto-complétion sur votre code (en MXML et en AS). Vous avez donc moins de chances de vous trompez et vous pouvez ainsi réaliser une vraie API.
Ajouter le Metatag Event à sa classe
Notez que pour pouvoir dispatcher un Event depuis votre classe / composant, votre classe doit hériter de EventDispatcher (ou passer par un objet qui en hérite). Vous aurez ainsi accès aux méthodes dispatchEvent() et addEventListener(). Pour ce métatag, 2 attributs sont à préciser au minimum:
- name: Le type d'Event (sous forme de String) ainsi que le type d'objet évènement.
- type: Le type d'objet évènement, il faut donner le "qualified name" de la classe, c'est à dire le nom de la classe avec les noms de packages. Si vous propagez un simple event,il faut par exemple donner: flash.event.Event.
Pour une classe ActionScript
Dans le cas d'une classe ActionScript, il suffit de placer le Metatag juste avant la déclaration de classe:
package comp {
import flash.events.Event;
import flash.events.EventDispatcher;
[Event(name="enableChanged", type="myeventpackage.CustomEvent")]
public class MonComposant extends EventDispatcher {
private var _enabled:Boolean=false;
public function MonComposant() {
}
public function set enabled(value:Boolean):void {
dispatchEvent(new CustomEvent("enableChanged"));
}
}
}
// fichier event custom
package myeventpackage
{
import flash.events.Event;
public class CustomEvent extends Event
{
public static const ENABLED_CHANGED:String = "enabledChanged";
public function CustomEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
}
}
}
Dans un composant MXML
Pour un composant MXML, il faut utiliser le tag <mx:Metadata> directement en tant qu'enfant du nœud principal:





