Méthode simple pour communiquer entre composants d'un projet Flex
Par Gwenn Guihal :: 31/03/2008 :: Flex :: #28 :: rss
Bonjour,
Au fur à mesure des projets Flex, j'ai remarqué que la communication entre les composants de l'application, implémentée par l'envoi d'évenements, devenait peu à peu compliqué plus le projet devenait conséquent. Vous me direz d'utiliser dans ce cas là l'architecture MVC... En effet, pour les gros gros projets qui utilisent une grosse partie traitement cela est bien utile mais pour une application composée de quelques pages et composants il m'a fallu trouvé une autre solution.
Je ne garantie pas du tout que cette solution est la bonne, mais elle est bien pratique. Il s'agit d'utiliser un singleton en tant que notifieur. Pour ceux qui ne savent pas ce qu'est un singleton, il s'agit d'un objet instancié une seule fois mais pourtant disponible dans tous les autres objets souhaités (à peu près).
Voici la méthode pour créer un singleton en AS3 (nous appelerons notre class "Notifieur"):
package neoia.myrddin
{
import flash.events.EventDispatcher;
public class Notifieur extends EventDispatcher
{
private static var instance:Notifieur;
public function Notifieur()
{
super();
}
/**
* Singleton EventHandler
*/
public static function getInstance() : Notifieur {
if ( instance == null ) instance = new Notifieur( );
return instance as Notifieur;
}
}
}
Notifieur hérite de EventDispatcher afin d'écouter des événements.
Et voici comment l'instancier :
import neoia.myrddin.Notifieur;
private var notifieur:Notifieur;
// méthode appelée lors du creationComplete du composant
private function init():void
{
notifieur = Notifieur.getInstance();
}
Nous avons donc notre Notifieur. Ensuite, nous créons une nouvelle classe, que nous nommons pour l'exemple Notification. Cette classe hérite de la classe Event et va nous permettre d'envoyer nos propres événements du type "l'utilisateur s'est connecté".
Voici la classe Notification.as :
package neoia.myrddin
{
import flash.events.Event;
public class Notification extends Event {
public static const USER_LOGGED:String = "User logged";
public var data:Object;
public function Notification(type:String, data:Object=null) {
super(type,true);
this.data = data;
}
}
}
Vous remarquerez qu'il y'a deux types de propriétés au constructeur, le type et data, un Object qui nous permet par exemple d'envoyer en même temps que l'événement une variable (l'id de l'utilisateur par exemple).
Maintenant que nous avons nos deux classes, voyons voir comment travailler avec cette méthode :
Voici un exemple de la hierarchie de notre projet :
- Main - Login - Panel MachinTruc
Nous voulons envoyer un événement (notification) du composant Login à Panel MachinTruc une fois que l'utilisateur s'est loggué.
Dans MachinTruc :
private function init():void
{
// initialisation de la NOTIFICATION
notifieur = Notifieur.getInstance();
notifieur.addEventListener(Notification.USER_LOGGED,onUserLogged);
}
/**
* Méthode listened
* Au moment où un user se loggue, on ...
*/
private function onUserLogged(e:Notification):void
{
// votre code
}
Et dans Login (on envoie notre notification) :
notifieur.dispatchEvent(new Notification(Notification.USER_LOGGED));
Et voili voulou. Plus besoin de réfléchir à comment est constituer la displayList du projet. Je n'ai pas encore testé à fond de chez fond cette méthode, mais elle a l'air de bien marcher sur tous les projets que je réalise actuellement.
En espérant que cela vous soit utile. Si vous avez des questions, n'hésitez pas !

Commentaires
1. Le 01/04/2008 à 08:48, par mat
2. Le 01/04/2008 à 10:19, par myrddin
3. Le 16/04/2008 à 12:18, par lolo
4. Le 25/04/2008 à 17:14, par niko
5. Le 28/04/2008 à 09:36, par myrddin
6. Le 29/04/2008 à 12:06, par MelElectro
7. Le 07/05/2008 à 12:35, par PeZ
8. Le 07/05/2008 à 15:37, par myrddin
Ajouter un commentaire