Bonjour,
j'ai tourné le problème dans tous les sens, j'arrive pas à comprendre où j'ai déconné. Mon problème est le suivant : j'ai une classe MyClass qui émet un événement custom, et y a rien à faire j'arrive pas à le "catcher".
Ci-dessous le code en tris partie :
Ma classe qui va émettre l’événement :
Mon événement custom :
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 package { import mx.controls.Label; public class MyClass extends Label { public function MyClass() { } public function emitEvent():void { dispatchEvent(new MyClassEvent(MyClassEvent.MY_EVENT,true)); trace("event emitted"); } } }
Et enfin mon application :
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 package { import flash.display.InteractiveObject; import flash.events.MouseEvent; public class MyClassEvent extends MouseEvent { public static const MY_EVENT:String = "MY_EVENT"; public function MyClassEvent(type:String, bubbles:Boolean=true) { super(type, bubbles); trace("event created"); } } }
Lorsque j'execute mon programme et que je clique successivement sur les 4 boutons, toutes les étapes se réalisent correctement mais au final la dernière ne me permet pas de "catcher" mon événement comme en atteste la sortie console ci-dessous :
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 <?xml version="1.0" encoding="utf-8"?> <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="400" height="400"> <mx:Script> <![CDATA[ import MyClass; private var _mc:MyClass; private function createMyClass():void { _mc = new MyClass(); trace("class created"); } public function createListener():void { this.addEventListener(MyClassEvent.MY_EVENT, catchEvent); trace("listener added"); } public function verifyListener():void { if (this.willTrigger(MyClassEvent.MY_EVENT)) trace("listener verified by willTrigger"); if (this.hasEventListener(MyClassEvent.MY_EVENT)) trace("listener verified by hasEventListener"); } private function launchSignal():void { _mc.emitEvent(); } private function catchEvent(event:MyClassEvent):void { trace("event catched !!"); } ]]> </mx:Script> <mx:VBox width="100%" height="100%" paddingTop="10" paddingLeft="10" paddingRight="10" paddingBottom="10"> <mx:Button label="Create" click="createMyClass();" /> <mx:Button label="Add listener" click="createListener();" /> <mx:Button label="Verify listener" click="verifyListener();" /> <mx:Button label="Signal" click="launchSignal();" /> </mx:VBox> </mx:WindowedApplication>
Je n'ai pas le message "event catched !!" indiquant que mon événement à bien été intercepté[SWF] preview.swf - 1*040*971 bytes after decompression
class created
listener added
listener verified by willTrigger
listener verified by hasEventListener
event created
event emitted
Ca fait plusieurs jours que je creuse, et j'ai pas trouvé, j'imagine que ça doit être tout con, mais je vois pas ce que j'ai oublié. Quelqu'un a t'il une idée pour me mettre sur la voie ?
D'avance merci.
Partager