Enlaces e información

Comenta lo que creas oportuno.


Otros posts
Linux Año 0
Hacer un IN en C#

Event Bubbling en FLEX 2

Escrito por Roberto M. Oliva en Marzo 5th, 2007

En realidad este post no es una continuación de este otro: Event Bubbling en Flex. Más bien es una ampliación del código del mismo a petición de Ricardo.

Event Bubbling es el proceso por el cual Flex pasa un evento entre componentes y subcomponentes. Este ejemplo es una pequeña explicación para poder atrapar un evento generado en un componente más o menos genérico por aquellas partes de la aplicación que lo utilizan.

En este ejemplo, tenemos un selector de fechas. Su presentación en el diseñador del Flex Builder sería algo similar a lo siguiente:

Componente Flex para seleccionar entre dos flechas

El funcionamiento de este componente es muy sencillo: Introducimos dos fechas y pulsamos el boton Ir para que se realice la acción correspondiente.

El código que implementa este componente es el siguiente:

1 < ?xml version=1.0 encoding=utf-8?>

2 < mx:HBox xmlns:mx=http://www.adobe.com/2006/mxml width=100% height=100%>

3 < mx:Metadata>

4 [Event(”buscar”)]

5 mx:Metadata>

6 < mx:Script>

7 < ![CDATA[

8 import flash.events.EventDispatcher;

9

10 [Bindable]

11 public var dtFechaInicial : Date;

12

13 [Bindable]

14 public var dtFechaFinal : Date;

15

16 private function onBuscar(event: Event) : void

17 {

18 dispatchEvent(new Event(”buscar”));

19 }

20 ]]>

21 mx:Script>

22 < mx:Spacer width=20/>

23

24 < mx:Label id=lblFInicial text=F Inicial: />

25 < mx:DateField id=dtFInicial selectedDate={dtFechaInicial} />

26 < mx:Label id=lblFFinal text=F Final: />

27 < mx:DateField id=dtFFinal selectedDate={dtFechaFinal} />

28 < mx:Button label=Ir id=cmdBuscar click=onBuscar(event); />

29 mx:HBox>

Esto hará que se generé un evento que podrá atrapar un contenedor cuando en este componente se genere un click del botón: Ir.

Para atrapar dicho evento, se puede hacer de dos maneras:

  • Declarativa, en el XML:

1 < ns1:controlEntreFechas height=27 buscar=Alert.show(’Buscar’);>

2 ns1:controlEntreFechas>

  • Programáticamente:

1 this.addEventListener(”Buscar”, onBuscarEntreFechas);

2

3 public function onBuscarEntreFechas (event:Event) : void {

4 // Realizar la accion de Buscar

5 }

En todo esto surge una necesidad interesante y es la de pasar parámteros a la función que se encarga de capturar los eventos. De esta manera no necesitamos consultar el contenedor que ejecuto el evento, sino directamente recibimos todos los datos necesarios. Es lo lógico, por otro lado.

Para ello, creamos una clase que herede de flash.events.Event:

1 package es.lciberica.psp.AusenciasPorteria.util

2 {

3 import flash.events.Event;

4

5 public class EntreFechasEvent extends Event

6 {

7 public var _fechaInicial : Date;

8 public var _fechaFinal : Date;

9

10 public function EntreFechasEvent(

11 type:String,

12 fechaInicial:Date,

13 fechaFinal:Date,

14 bubbles:Boolean=false,

15 cancelable:Boolean=false)

16 {

17 super(type, bubbles, cancelable);

18 _fechaInicial = fechaInicial;

19 _fechaFinal = fechaFinal;

20 }

21 }

22 }

La funcion onBuscar del componente, pasara a tener el siguiente código:

1 public function onBuscar(event : Event):void

2 {

3 dispatchEvent(new EntreFechasEvent(”Buscar”, dtFInicial.selectedDate, dtFFinal.selectedDate));

4 }

Con lo cual la función receptora del evento, puede recibir directamente las fechas:

1 public function onBuscarEntreFechas (event:Event) : void {

2 // Realizar la accion de Buscar

3 var entre_fechas_event : EntreFechasEvent = event as EntreFechasEvent;

4

5 // fecha inicial: entre_fechas_event._fechaInicial

6 // fecha final: entre_fechas_event._fechaFinal

7 }



Escriba un comentario

Dediquele un momento a comentar lo que piensa. Esta permitido usar HTML básico para formatear el escrito.

Comentarios de los lectores

Gracias

Hola, estoy recien iniciandome en el mundo de Flex, y este ejemplo me vino de maravilla

Hola, antes que nada gracias por la documentacion, esta super clara,

pero se me presento un problema al realizar el ejemplo, por que no me resulto

me corre el ejemplo, pero no funciona como deveria
yo creo que tengo problemas con esto

this.addEventListener(”Buscar”, onBuscarEntreFechas);

saludos
Gracias

Me alegro de que os haya ayudado.

Ricardo, no se porque no te funciona. La idea es que tu pones en el contenedor el componente de busqueda entre fechas:

Y, en la inicializacion de dicho componente, escribes el addEventListener para definir que funcion va a atrapar el evento de dicho controlEntreFechas

Probablemente… algo no este todavia claro:
-this: Es el contenedor del componente.
-”Buscar”: Es el nombre del evento.
-onBuscarEntreFechas: Es el nombre de la funcion que recibira la ejecucion del evento. Debe recibir un: event:Object como parametro

Espero que te ayude… si no, ya sabes donde estoy ;)

Hola, perdona que te moleste de nuevo

Hago todo lo que dijiste, pero no me genera el evento.
yo creo que te olvidaste de modificar el Metadata o algo asi.(lo digo por los parametros que recibe el componente)

no se fuera molestia, me podrias enviar el codigo a mi correo g.ricardox@gmail.com

gracias por todo

Hola! que buen tuturial.
Tengo una pregunta. Tengo un componente propio y dentro de este existe un serie de botones, lo que quiero es que al oprimir un boton me cambie el a un estado X de la aplicación, que en ultimas, esta es la que contiene a todos los componentes (o mxml que utilizo en la aplicación). Qué tendría que hacer

Hola Javier!
No se si te sigo bien…
A ver si voy bien con lo siguiente:
Tu tienes una aplicacion que contiene el componente y que recibe un evento desde dicho componente (al pulsar uno de sus botones por ejemplo).
Esa aplicación, al recibir dicho evento, puede hacer múltiples cosas, entre las que está el cambior el estado de dicha aplicación.
El caso no es muy diferente al ejemplo que pongo en esta entrada.
No se si te va a ayudar… a lo mejor si eres mas explicito…

Un saludo
Roberto M. Oliva

stavo cercando per informazione stato necessario per cose molto tempo. Grazie!!))

sto andando dire ai miei amici circa questo luogo - ? solo perfetto!

..was just passing by.. good work

the webmaster RULLLLES!!

could it be it? i was searching for information needed for such a long time. Thank you!

Aucuns doutes c’est une bonne page..

Ringraziamenti molto! Lo avete aiutato molto!

Great site, nice design

ein was fur netter Aufstellungsort. ich mag es yeah mich!

ein was fur netter Aufstellungsort. ich mag es yeah mich!

i am going to tell my friends about this site - it’s just perfect!

Aucuns doutes c’est une bonne page..

Grand emplacement - le bon travail ! ! !

what a nice site. i like it, yeah, I do!)))