2010-11-18 6 views
0

J'ai une liste déroulante qui est remplie de façon asynchrone par un service Web avec un événement caringorm. J'ai besoin de savoir quand cet événement se termine afin que je puisse définir la ligne de la zone de liste déroulante sélectionnée. Les données sont remplies mais je n'arrive pas à comprendre comment m'abonner à cet événement. Est-ce que quelqu'un sait chaud pour le faire.Comprendre cairngormevents dans le script d'action

Ce code ne semble pas fonctionner.

CairngormEventDispatcher.getInstance(). AddEventListener (SomeEvent.GETDATA, formLoaded); new SomeEvent (SomeEvent.GETDATA) .dispatch();

fonction protégée formLoaded (événement: CairngormEvent): void { Alert.show ("Woot"); }

Répondre

2

Cairngorm est une microarchitecture MVC.

d'abord: voici la documentation cairngorm 2.2.1 http://cairngormdocs.org/docs/cairngorm_2_2_1/index.html

Un CairngormEvent est associé à un ICommand par la méthode addCommand de classe FrontController. Chaque fois que vous exécutez SomeEvent (SomeEvent.GETDATA) .dispatch(), vous exécutez la méthode execute() de la commande associée à SomeEvent.GETDATA par le contrôleur.

L'écoute d'événements de CairngormEventDispatcher n'est pas une bonne pratique. Vous ne devriez pas appeler CairngormEventDispatcher dans tous les cas, cette classe est là pour que l'ensemble de la microarchitecture fonctionne correctement.

Votre vue (combobox) doit réagir au modèle (le résultat du webservice) automatiquement (ou par un autre objet au milieu [comme PureMVC fait])

Ce que je suggère de résoudre rapidement votre problème en utilisant cairngorm est:

  • registre webservice dans le localisateur de services afin d'avoir une référence au niveau de l'application à elle (pour ce faire, il suffit de créer un composant MXML extension ServiceLocator, et de mettre votre HTTPService ou tag webservice là , puis attribuez-lui un identifiant)

  • créer votre localisateur de modèle (la classe qui stocke les données récupérées à partir du Web) et marquez votre liste de données que vous souhaitez afficher dans la liste déroulante comme [Bindable]

  • identifier la commande couplée à SomeEvent.GETDATA et:

  • appeler le service enregistré dans le localisateur de service dans la méthode d'exécution
  • mettre en œuvre l'interface IResponder (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/rpc/IResponder.html) pour gérer le résultat du service (enregistrez votre commande en tant que répondeur du service dans la méthode execute)
  • dans la méthode de résultat analyser les données que vous aviez à partir du serveur, puis les stocker dans le localisateur de modèle (qui peut être facilement récupéré par l'accesseur singleton)

  • dans la vue (le fichier MXML en maintenant le combo) , liez le fournisseur de données combo à votre liste de données de localisateur de modèle (rendu peu lisible auparavant) afin de le faire réagir aux changements survenus dans le modèle.

have fun;)