Bonjour,
Je n'arrive pas à comprendre le comportement d'un évènement, qui ne marche plus dès que plusieurs classes sont en jeu.
Dans un premier temps, j'ai le main.mxml et une classe voiture.as. Une fonction du main.mxml instancie un objet Voiture et lance une requête, dont le retour est identifié par le déclenchement d'un évènement. La fonction du main.mxml détecte l'évènement et récupère les informations directement des les propriétés de l'objet Voiture.
main.mxml
voiture.as
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 voitureClass:Voiture = new Voiture(); voitureClass.addEventListener("event_getKilometre", afficher); voitureClass.getKilometers(); public function afficher(e:Event) { Alert.show(voitureClass.km); }
Tout se passe bien.
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 [Event("event_getKilometre")]; public class Voiture extends EventDispatcher { public function getKilometers():void { var remote:RemoteObject = new RemoteObject(); remote.getKilometers.addEventListener(ResultEvent.RESULT, getKilometersResult); remote.getkilometers(); } private function getKilometersResult(evt:ResultEvent):void { this.km = evt.result as String; dispatchEvent(new Event("event_getKilometre")); } }
La classe Voiture n'étant pas la seule de la librairie, je souhaite utiliser l'héritage, et je crée une classe Maman.as. Cette classe se charge notamment de toutes les connexions avec RemoteObject.
main.mxml
voiture.as
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 voitureClass:Voiture = new Voiture(); voitureClass.addEventListener("event_getKilometre", afficher); voitureClass.getKilometers(); public function afficher(e:Event) { Alert.show(voitureClass.km); }
maman.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 [Event("event_getKilometre")]; public class Voiture extends Maman { public function getKilometers():void { super.callRemote('getKilomters', 'getKilometersResult'); super.remote.getKilometers(); } private function getKilometersResult(evt:ResultEvent):void { this.km = evt.result as String; dispatchEvent(new Event("event_getKilometre")); Alert.show("toto"); } }
Cette deuxième méthode fonctionne, jusqu'à la diffusion de l'évènement "event_getKilometre". La fonction afficher (du main.mxml) n'est pas appelée dans la seconde méthode, alros qu'elle l'est dans la première.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 public class Maman extends EventDispatcher { public function callRemote(callFunction:String, returnFunction:String):void { var remote:RemoteObject = new RemoteObject() remote[callFunction].addEventListener(ResultEvent.RESULT, classList[activeClass][returnFunction]); } }
Dans la seconde méthode, la trace "toto" s'affiche bien, preuve que le parcours s'effectue comme il faut.
J'ai l'impression que l'évènement "event_getKilometre" n'est plus écouté dans la seconde méthode, mais je n'arrive pas à voiur pourquoi.
Merci,
Vence
PS : j'ai intentionnellement supprimé quelques éléments dans le code, notamment sur l'appel AMFPHP, sachant que quelque soit la méthode, l'appel est bien effectué, et la valeur de retour arrive bien jusqu'à la fonction
Partager