2009-02-09 19 views
12

En una aplicación FLEX, trato de "volver a enviar" un evento personalizado. Es decir. component1 no dispatchEvnet (event), component2 registra un controlador para el evento, la única función del controlador es, de nuevo, dispatch (event). Finalmente, el componente 3 escucha el evento que sale del componente2. Lo que trato de hacer es similar al concepto de excepciones de "relanzamiento" (y por razones similares). La diferencia es que el reenvío no parece funcionar en AS3 (Flash 10). En IE, no pasa nada, y en FF3 hay una excepción que dice que el tipo de conversión falló al tratar de forzar el tipo de evento a mi evento CustomEvent al llamar al controlador en component3. El código de seguimiento en el depurador muestra que cuando se llama al componente3, el evento es, de hecho, uno genérico, con todas mis cosas personalizadas perdidas. ¿Se supone que es el caso?Evento de reenvío en FLEX

Respuesta

19

El problema que está experimentando se debe a que no se anuló el evento clone() en su evento personalizado.

Cuando los eventos se redistribuyen, se clonan y modifican. Si no anula clone() obtendrá la implementación base de clone(), que devuelve un evento. Como Event no se puede convertir a su tipo de evento personalizado, se genera un error de tiempo de ejecución.

De la documentación:

Al crear su propia clase personalizada de eventos, debe reemplazar el método heredado Event.clone() a fin de que para duplicar las propiedades de la clase personalizada. Si no establece todas las propiedades que agrega en su subclase de eventos, esas propiedades no tendrán los valores correctos cuando los oyentes manejen el evento redispatched.