Event Bubbling en FLEX 2

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:

flex_entre_fechas.gif

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:

.cf { font-family: Courier New; font-size: 8pt; color: black; background: white; }.cl { margin: 0px; }.cln { color: #2b91af; }.cb1 { color: blue; }.cb2 { color: maroon; }.cb3 { color: red; }.cb4 { color: gray; }

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:
.cf { font-family: Courier New; font-size: 8pt; color: black; background: white; }.cl { margin: 0px; }.cln { color: #2b91af; }.cb1 { color: blue; }.cb2 { color: maroon; }.cb3 { color: red; }

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

2 ns1:controlEntreFechas>

  • Programáticamente:
    .cf { font-family: Courier New; font-size: 8pt; color: black; background: white; }.cl { margin: 0px; }.cln { color: #2b91af; } .cf { font-family: Courier New; font-size: 8pt; color: black; background: white; }.cl { margin: 0px; }.cln { color: #2b91af; }

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:

.cf { font-family: Courier New; font-size: 8pt; color: black; background: white; }.cl { margin: 0px; }.cln { color: #2b91af; }

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:

.cf { font-family: Courier New; font-size: 8pt; color: black; background: white; }.cl { margin: 0px; }.cln { color: #2b91af; }

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:

.cf { font-family: Courier New; font-size: 8pt; color: black; background: white; }.cl { margin: 0px; }.cln { color: #2b91af; }

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 }

Todavía no hay comentarios

Enviar un comentario nuevo

El contenido de este campo se mantiene privado y no se mostrará públicamente.
  • Etiquetas HTML permitidas: <a> <blockquote> <br> <cite> <code> <dd> <div> <dl> <dt> <em> <h1> <h2> <h3> <h4> <h5> <h6> <hr> <img> <li> <ol> <p> <pre> <span> <strong> <swf> <table> <tbody> <td> <th> <tr> <ul>
    Allowed Style properties: background-color, background-image, border, border-bottom, border-bottom-color, border-bottom-style, border-bottom-width, border-color, border-left, border-left-color, border-left-style, border-left-width, border-right, border-right-color, border-right-style, border-right-width, border-spacing, border-style, border-top, border-top-color, border-top-style, border-top-width, border-width, color, direction, font, font-family, font-size, font-style, font-variant, font-weight, height, left, line-height, list-style-type, margin, margin-bottom, margin-left, margin-right, margin-top, padding, padding-bottom, padding-left, padding-right, padding-top, right, text-align, text-decoration, top, width
  • Syntax highlight code surrounded by the {syntaxhighlighter OPTIONS}...{/syntaxhighlighter} tags.
  • E-Mail addresses are hidden with reCAPTCHA Mailhide.

Más información sobre opciones de formato

CAPTCHA
Esta pregunta es para comprobar si eres un ser humano y evitar el envío automático desde sistemas de spam