IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Flex Discussion :

problème de débutant avec la classe EventDispatcher


Sujet :

Flex

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de ouaqa
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2009
    Messages : 95
    Par défaut problème de débutant avec la classe EventDispatcher
    Bonjour à tous,

    Je suis confronté à un problème de débutant que je vous soumet après avoir passé bien trop de temps dessus.
    J'ai crée une classe actionscript et je souhaite qu'elle dispatche un évènement de type FlexEvent.creationComplete lors de son instanciation. Seulement, l'écouteur n'est jamais appelé.
    Cela deviens frustrant, d'autant que je suis le seul développeur flex au sein de ma société et que par conséquent, personne ne peut m'aider sur des problèmes de ce genre : triviaux mais spécifiques à as3 & flex.

    voici le code du prototype que j'ai crée pour isoler le soucis :

    protoEventDispatch.mxml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
    	<mx:Script>
    		<![CDATA[
    			import mx.events.FlexEvent;
    			import protoClass.MyProtoClass;
     
    			public var myObject : MyProtoClass ;
     
    			private function init() : void
    			{
    				myObject = new MyProtoClass ();
    				myObject.addEventListener(FlexEvent.CREATION_COMPLETE,traceIt);
    			}
     
    			public function traceIt (AEvent : FlexEvent) : void
    			{
    				trace(" event received ! "); //n'affiche rien ... évidemment...
    			}
     
     
    		]]>
    	</mx:Script>
    </mx:Application>
    MyProtoClass.as :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    package protoClass
    {
    	import flash.events.EventDispatcher;
     
    	import mx.events.FlexEvent;
     
    	[Event (name="creationComplete" , type="mx.events.FlexEvent")]
    	public class MyProtoClass extends EventDispatcher
    	{
    		public function MyProtoClass() 
    		{
    			trace ("creating protoclass");
    			myDispatchFunction();
    		}
     
    		public function myDispatchFunction() : void
    		{
    			dispatchEvent(new FlexEvent (FlexEvent.CREATION_COMPLETE ));
    			trace (hasEventListener(FlexEvent.CREATION_COMPLETE)); //affiche false
    			trace (willTrigger(FlexEvent.CREATION_COMPLETE)); //affiche false
    		}
     
    	}
    }
    Je vous remercie de votre aide, tout conseil est le bienvenu.

  2. #2
    Membre éclairé Avatar de ToniConti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2009
    Messages : 245
    Par défaut
    Salut,

    Ton problème est tout simple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    private function init() : void
    {
    	myObject = new MyProtoClass ();
    	myObject.addEventListener(FlexEvent.CREATION_COMPLETE,traceIt);
    }
    Dans la première ligne, tu instancies ton objet et vu ta classe MyProtoClass, c'est à ce moment que l'évènement FlexEvent.CREATION_COMPLETE est émis.
    Dans la deuxième instruction tu demandes à ton objet d'écouter l'évènement mais le problème c'est que l'évênement est déjà émis

    A ta place je ferais comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    private function init() : void
    {
            this.addEventListener(FlexEvent.CREATION_COMPLETE,traceIt);
    	myObject = new MyProtoClass ();
    }

  3. #3
    Membre confirmé Avatar de ouaqa
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2009
    Messages : 95
    Par défaut
    merci beaucoup ToniConti, ton message m'a beaucoup aidé.
    En testant ta solution, cela n'a pas fonctionné, mais en réalisant l'action suivante, ça marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    myObject = new MyProtoClass ();
    				myObject.addEventListener(FlexEvent.CREATION_COMPLETE,traceIt);
    				myObject.myDispatchFunction();
    C'est vraiment le genre d'erreur où on se sent très bête quand ça fonctionne...

  4. #4
    Membre éclairé Avatar de ToniConti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2009
    Messages : 245
    Par défaut
    Content d'avoir pu t'être utile
    Bonne fin de journée.

    PS : N'oublie pas de cliquer sur le bouton résolu au bas du post

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    793
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2009
    Messages : 793
    Par défaut
    J'imagine que tu as simplifié le code à l'extrême pour mieux te faire comprendre et que tu te trouves en réalité dans un contexte un peu différent.
    En effet dans ton exemple tu introduis un comportement asynchrone (événementiel) là où visiblement il ne sert à rien...

  6. #6
    Membre confirmé Avatar de ouaqa
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2009
    Messages : 95
    Par défaut
    Oui absolument, l'exemple est simplifié à l'extrême.

    En pratique, voici le schéma de mon appli :
    - j'ai des composant et des managers de mon composant.
    - ce sont les managers qui sont chargés de notifier le manager général d'ajouter le composant, lorsque ce dernier a fini d'être crée.

    L'architecture est de forme imbriquée : le manager principal gère des managers secondaires qui gèrent leurs composants et des sous-managers s'occupant de traiter des composants spécifiques.

    Dans ce contexte, je suis obligé d'attendre des notifications de mes composants de plus bas niveau afin de savoir à quel moment le composant final pourra être ajouté à l'application.

    Saupoudrez le tout d'appels amf et vous obtiendrez une jolie soupe de nouilles (mais chaque élément est facilement réutilisable).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'héritage avec une classe abstraite
    Par Ph.denis dans le forum C++
    Réponses: 7
    Dernier message: 22/03/2008, 10h37
  2. problème de débutant avec la librairie glut sous dev C++
    Par mozillo3625 dans le forum Windows
    Réponses: 0
    Dernier message: 30/11/2007, 22h56
  3. Problème balise iterate avec la classe HashSet
    Par kokumbo dans le forum Struts 1
    Réponses: 8
    Dernier message: 07/11/2007, 15h43
  4. Réponses: 8
    Dernier message: 16/10/2006, 12h28
  5. [C#][service windows] problème de débutant avec 1 timer
    Par Nycos62 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 14/10/2005, 11h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo