2009-01-14 11 views
2

J'ai un objet simple qui récupère les données de géocodage de l'API Google Maps et je voudrais qu'il envoie un ensemble d'événements personnalisés en fonction de la réponse de Google. Cependant, je n'ai pas les méthodes addEventListener() et dispatchEvent() sur cette classe car elle n'élargit pas UIComponent. Est-il possible de créer des événements personnalisés dans Flex 3 sans hériter de UIComponent?Pouvez-vous créer des événements personnalisés sur des objets non basés sur UIComponent dans Flex 3?

Répondre

8

Absolument oui. Pour profiter de la gestion des événements, votre objet personnalisé doit étendre EventDispatcher:

public class MyClass extends EventDispatcher 
{ 
    // ... 

    public function myFunction():void 
    { 
     dispatchEvent(new Event("myEvent")); 
    } 
} 

Cela prend en charge des événements de répartition.

Puis aussi bien, si vous avez besoin, vous pouvez également créer une classe distincte qui étend l'événement, ce qui vous donne l'option (entre autres) de fixer des données spécifiques à l'événement pour une utilisation dans le gestionnaire:

public class MyClass extends EventDispatcher 
{ 
    // ... 

    public function myFunction():void 
    { 
     dispatchEvent(new MyEvent(someData)); 
    } 
} 

public class MyEvent extends Event 
{ 
    private var _myEventData:Object; 

    public function MyEvent(eventData:Object) 
    { 
     _myEventData = eventData; 
    } 
} 

.. donc alors dans votre gestionnaire, vous devriez simplement:

private function myHandler(event:MyEvent):void 
{ 
    trace(event.myEventData.toString()); 
} 

sens?

+0

Merci homme ... vous venez d'enregistrer un débutant Flex;) –

+0

Mon plaisir. Bonne chance! –

2

Étendez la classe EventDispatcher ou implémentez l'interface IEventDispatcher à partir du package flash.events.

1

Oui, cela devrait être possible. Étendre EventDispatcher comme ceci:

import flash.events.*; 
    public class MyDispatcher extends EventDispatcher { 
    private function doIt(event:Event):void { 
     dispatchEvent(new Event("myEvent")); 
    } 
0

C'est exactement ce que j'ai fait! étendu EventDispatcher et hérité dispatchEvent

gars Merci

Questions connexes