Pregunta

Tengo ese problema: Tengo 2 componentes personalizados, que tienen su propia jerarquía de anidación ... Una de ellas es para otro contenedor. Tengo que "los familiaricen" entre sí. La manera en que yo estoy tratando de lograr que utiliza los eventos globales (un lado está disparando y la otra es la captura):

Application.application.addEventListener("Hello", function (data:Event):void{
        // .. some actions
    });

//and
Application.application.dispatchEvent(new Event(Hello));

Todo es bastante bueno, pero hay una cosita .. cuando estoy tratando de capturar el evento, que no puede acceder a la clase, que se está imponiendo. Por ejemplo:.

  1. Container desencadena el evento.
  2. Niño caughts él.
  3. A continuación, se debe crear la conexión entre el contenedor y de niños.

Pero, el único que podía acheive pasa una referencia al contenedor en la DynamicEvent. ¿Hay alguna posibilidad de que yo pudiera acceder al niño en la función de controlador de eventos. O tal vez hay forma más elegante de resolver este problema ...

Cualquier ayuda sería greately apreciado:)

¿Fue útil?

Solución

En la mayoría de los casos, ya sea objetivo o currentTarget le dará acceso al componente que está disparando el evento.

http://livedocs.adobe.com/flex /3/langref/flash/events/Event.html http://livedocs.adobe.com/flex/ 3 / langref / flash / eventos / Event.html # currentTarget http://livedocs.adobe.com/flex/ 3 / langref / flash / eventos / Event.html # objetivo

Sin embargo, con su enfoque, que está disparando el caso de la aplicación de nivel superior; no desde cualquiera de sus componentes anidados. Esto me parece inusual.

Me imaginar que tiene una jerarquía de esta manera:

Application

--- Container1

------- Container2

Yo recomendaría disparar el evento desde container2 y escuchando para ello en container1.

Su código de despacho en Container2 será algo como esto:

this.dispatchEvent(new Event('myCustomEvent'));

En Container1 se puede detectar el evento algo como esto:

container2.addEventListener('myCustomEvent', onMyCustomEvent);

Si es necesario añadir los datos de eventos a medida para su evento; puede crear sus propios datos de la clase de evento personalizado y añadir. ¿Tiene usted un caso de uso específico para la cocción de los eventos fuera del contenedor de aplicaciones? Me encantaría escucharlo.

Otros consejos

Hemos hecho como dice Flextras, crear eventos personalizados, en nuestros eventos Cairngorm casos, y en realidad agregan datos, una referencia al contenedor que desea el respondedor evento para responder. Realmente no me gusta hacerlo de esa manera, aunque, como en muy raras ocasiones el contenedor podría no estar en un estado en el que se puede interactuar con. En nuestro caso tenemos una gran cantidad de módulos de carga dinámica que puede ir y venir, y luego Wham! De repente, se obtiene el equivalente a la flexión de una excepción de puntero nulo. Pero ese es el precio que se paga cuando se está altamente asíncrona, una gran cantidad de cheques nulos y la captura de excepción.

El tipo de gestión de eventos que estás buscando es bien resuelto con un marco de dependencia de la inyección como mate o Swiz . Básicamente, usted está necesitando a los eventos de captura a nivel global, y luego ejecutar diversas acciones a través de su aplicación en diversos componentes en esos eventos.

compañero tiene el concepto de un eventmap que permite asignar ciertos eventos para interactuar con sus puntos de vista en varios sentidos. Usted puede inyectar valores en propiedades de la vista o llamar a métodos dentro de una vista cuando ocurren ciertos eventos.

Si no quiere ir con un marco, vistazo a las burbujas de propiedad de la clase de eventos. Al sustituir la clase de evento para crear un evento personalizado, establecer el valor por defecto de burbujas a true . De esta manera, sus eventos continuará suben a la aplicación principal, independientemente de cuán profundamente se anidan en su aplicación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top