Un event est comme son nom l'indique un évènement. Cela permet par exemple de déclencher une action en fonction de la réception ou non de cet évènement.

Tous les composants Flex de base possèdent des event (qu'ils sont capables de dispatcher)

Un petit exemple très simple, avec un bouton :

<mx:Button x="10" y="10" label="Button" click="trace('bouton clické')"/>

Le composant button peut dispatcher un event Click que l'on pourra intercepter. Nous pourrons donc déclencher une action en conséquence (réception ou non de l'event). On pourrait aussi le spécifier comme ceci :

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
	layout="absolute" creationComplete="init()">
<mx:Button x="10" y="10" label="Button" id="myBt"/>
<mx:Script>
	<![CDATA[
		
	public function init():void {
			
		myBt.addEventListener(MouseEvent.CLICK, clickBt);
			
	}
		
	public function clickBt(event:MouseEvent):void{
			trace('Boutton clické');
	}
		
	]]>
</mx:Script>
</mx:Application>

Voyons maintenant comment dispatcher un event. Imaginons un petit composant de loggin, comme ceci :

<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" >
 
<mx:Metadata>
	[Event("UserLogged")]
</mx:Metadata>
 
<mx:Script>
	<![CDATA[
 
	import flash.events.Event;
	import mx.controls.Alert;
			
	private function validateMe():void {
					
		if (userInput.text == "bob" 
                    && passwordInput.text == "007" ) {
					
			dispatchEvent( new Event("UserLogged") );
		
		} else {
 
			Alert.show("Erreur de login / mot de passe");
		}
	}	
	]]>
</mx:Script>
<mx:Form>
	<mx:FormItem label="User Name:" >
		<mx:TextInput id="userInput" />
	</mx:FormItem>
	<mx:FormItem label="Password:" >
		<mx:TextInput id="passwordInput" />
	</mx:FormItem>
	<mx:FormItem width="245">
		<mx:Button label="Login" click="validateMe()"/>
	</mx:FormItem>
</mx:Form>
 
</mx:TitleWindow>

Nous pouvons intercepter l'event à l'intérieur du composant, comme ceci par exemple :

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
	layout="absolute" creationComplete="init()">
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" >
 
<mx:Script>
 
 
	<![CDATA[
 
	import flash.events.Event;
	import mx.controls.Alert;
 
	public function init():void {
			
		addEventListener("UserLogged", populateInfos);
			
	}
 
	private function populateInfos(event:Event):void {
             
		infos.text = "loggé";
 
    }
			
	private function validateMe():void {
					
		if (userInput.text == "bob" 
                    && passwordInput.text == "007" ) {
					
			dispatchEvent( new Event("UserLogged") );
		
		} else {
 
			Alert.show("Erreur de login / mot de passe");
		}
	}	
	]]>
</mx:Script>
<mx:Form>
	<mx:FormItem label="User Name:" >
		<mx:TextInput id="userInput" />
	</mx:FormItem>
	<mx:FormItem label="Password:" >
		<mx:TextInput id="passwordInput" />
	</mx:FormItem>
	<mx:FormItem width="245">
		<mx:Button label="Login" click="validateMe()"/>
	</mx:FormItem>
</mx:Form>
</mx:TitleWindow>
	<mx:Label x="10" y="166" text="" id="infos"/>
 
</mx:Application>

En revanche, si nous souhaitons dispatcher cet event à l'extérieur de notre composant, pour qu'un autre composant puisse l'intercepter par exemple, nous devons déclarer des balises MetaData dans notre composant, comme ceci :

<mx:Metadata>
[Event("UserLogged")]
</mx:Metadata>

Dans le fichier principal, nous aurons donc :

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
	xmlns:comps="com.phiphou.components.*"
	layout="absolute" creationComplete="init()">
	<comps:login UserLogged="infos.text='loggé'"/>
	<mx:Label x="10" y="166" text="" id="infos"/>
 
</mx:Application>

Voilà...Tout ceci est très bien, mais pour l'instant, nous dispatchons un event de type simple, c'est à dire uniquement une sorte de message. Mais nous pouvons créer nos propres event, qui contiendront d'autres propriétés.

Voici un exemple :

L'event 'loginEvent.as' :

package com.phiphou.events
{
	import flash.events.Event;
	import com.phiphou.application.User
 
	public class LoginEvent extends Event
	{
		public function LoginEvent( type:String, login:User )
		{
			super(type);
			this.login = login;
		}
		
		public var login:User;
	}
 
}

Et pour l'utiliser, le composant :

<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Metadata>
	[Event(name="validUser",type="com.phiphou.events.LoginEvent")]
</mx:Metadata>
<mx:Script>
	<![CDATA[
	import com.phiphou.application.User;
	import com.phiphou.events.LoginEvent;
 
	private function validateMe():void {
			
		var login:User = new User();
		login.name = userInput.text;
		login.password = passwordInput.text;
		dispatchEvent( new LoginEvent('validUser', login));
	}	
	]]>
</mx:Script>
<mx:Form>
	<mx:FormItem label="User Name:" >
		<mx:TextInput id="userInput" />
	</mx:FormItem>
	<mx:FormItem label="Password:" >
		<mx:TextInput id="passwordInput"  />
	</mx:FormItem>
	<mx:FormItem width="245">
		<mx:Button label="Login" click="validateMe()"/>
	</mx:FormItem>
</mx:Form>
 
</mx:TitleWindow>

Et le fichier principal :

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
	xmlns:comps="com.phiphou.components.*"
	layout="absolute" creationComplete="init()">
	<comps:login  validUser="infos.text=event.login.name"/>
	<mx:Label x="10" y="166" text="" id="infos"/>
 
</mx:Application>

Dans cet exemple, la fonction validateMe() du composant 'login' crée un objet User, puis dispatche un event perso qui contient l'objet User. L'application peut donc accéder à l'objet User transmis par le composant (event.login).

Voilà pour ce petit aperçu des events sous Flex 2...