2009-02-09 7 views
12

Dans une application FLEX, j'essaie de "redistribuer" un événement personnalisé. C'est à dire. component1 fait dispatchEvnet (event), component2 enregistre un gestionnaire pour l'événement, la seule fonction du gestionnaire étant, encore une fois, dispatch (event). Enfin, component3 écoute l'événement issu de component2. Ce que j'essaie de faire est similaire au concept de "relancer" les exceptions (et pour des raisons similaires). La différence est que la redistribution ne semble pas fonctionner dans AS3 (Flash 10). Dans IE, rien ne se passe, et dans FF3 il y a une exception disant que la distribution de type a échoué en essayant de contraindre le type d'événement à mon CustomEvent tout en appelant le gestionnaire dans component3. Le code de suivi dans le débogueur montre qu'au moment où le composant 3 est appelé, l'événement est, en effet, générique, avec tous mes trucs personnalisés perdus. Est-ce que c'est supposé être le cas?Réorganisation de l'événement dans FLEX

Répondre

19

Le problème que vous rencontrez est dû au fait que vous n'avez pas ignoré l'événement clone() dans votre événement personnalisé.

Lorsque des événements sont redispatchés, ils sont clonés et modifiés. Si vous ne surchargez pas clone(), vous obtenez l'implémentation de base de clone(), qui renvoie un événement. Étant donné que l'événement ne peut pas être converti en votre type d'événement personnalisé, une erreur d'exécution est renvoyée.

De la documentation:

Lorsque vous créez votre propre classe d'événement personnalisé, vous devez remplacer la méthode Event.clone() héritée afin qu'il dupliquer les propriétés de votre classe personnalisée. Si vous ne définissez pas toutes les propriétés que vous ajoutez dans votre sous-classe d'événement, ces propriétés n'auront pas les valeurs correctes lorsque les écouteurs gèrent l'événement redispatched.