Comunidad de diseño web y desarrollo en internet online

Propagación de eventos

Citar            
MensajeEscrito el 13 Jun 2012 11:21 am
Estoy montado una web en la que poco a poco voy aplicando mis pobres conocimientos de flex y estoy atascado en el siguiente punto :
tengo, un MXML principal ( el Application ), un componente ( que muestra el "login" para el usuario ), y en este último un segundo componente que seria el botón de validación.
Lo que desearia es que al pulsar botón de validación pudiera capturar el evento en el MXML principal.
Actualmente tengo en el MXML principal :
addEventListener(ButtonEvents.BUTTON_CLICK, ButtonsClick,false,0,false);

y en el código del botón ( image en este caso ) el evento personalizado

var evt2:ButtonEvents = new ButtonEvents(SourceID);
FlexGlobals.topLevelApplication.dispatchEvent(evt2);


el problema es que el dispatchEvent que se realiza desde el componente boton, no me lleva nunca a la función "ButtonsClick" receptora de dicho evento.
Grácias !!!

Por JPNET

10 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Jun 2012 11:56 am
Tienes que agregarle un listener en el componente, que este haga de nuevo el dispatchEvent y agregar un lsitener desde la aplicacion principal. Si el evento tiene fase bubble, atraviesa el displaylist y en teoria un addEventListener genérico lo pillaría

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 13 Jun 2012 12:51 pm
Hola Jorge, grácias por la respuesta.

He intentado hacer lo que me dices pero sin éxito.

En el MXML principal :
addEventListener(ButtonEvents.BUTTON_CLICK, ButtonsClick,false,0,false);

<LoginUser:mrcLogin id="frmLogin" height="164" includeIn="Loaded" bottom="45" left="10" width="250">
</LoginUser:mrcLogin>

En el Componente 1:

private function OnCreationCompleted():void {
addEventListener(ButtonEvents.BUTTON_CLICK, ButtonsClick,false,0,false);
( he provado también btnOk.addEvent...)
}
private function ButtonsClick(sourceID:String):void {
Alert.show(sourceID,"Hola2");
var evt2:ButtonEvents = new ButtonEvents(sourceID);
dispatchEvent(evt2);
}

<Components:Button id="btnOk" right="10" top="65" IconStyle="0" Enabled="true" SourceID="Login.Ok"/>


En el componente 2: ( contenido dentro del anterior )

protected function image1_clickHandler(event:MouseEvent):void
{
var evt2:ButtonEvents = new ButtonEvents(SourceID);
FlexGlobals.topLevelApplication.dispatchEvent(evt2);
//dispatchEvent(evt2);
( he provado también directamente el dispatch. Por "debug" hasta aquí llego pero ni el componente 1 ni la app principal se enteran)

}

Por JPNET

10 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Jun 2012 01:00 pm
Usa el nombre de instancia para agregar los listeners

btnOk.addEventListener(ButtonEvents.BUTTON_CLICK, ButtonsClick);

para el componente 2, tienes que agregar el listener al formulario usando el ID que le hayas dado, y lo mismo para la aplicación principal

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 15 Jun 2012 08:28 am
Hola Jorge, grácias. Solucioné el tema.
añado pequeño ejemplo por si es útil para otras personas.

Un saludo y hasta la próxima,
Jordi

Generar 3 mxml.

Componente1.mxml

Código Flex :

<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300" contentBackgroundColor="#EF3232" xmlns:ns1="*">
   <fx:Declarations>
      <!-- Place non-visual elements (e.g., services, value objects) here -->
   </fx:Declarations>
   <ns1:componente2 width="243" height="220" horizontalCenter="0" verticalCenter="0">
   </ns1:componente2>
</s:Group>


Componente2.mxml

Código Flex :

<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx" width="104" height="70">

   <fx:Script>
      <![CDATA[
         import flash.events.*;
         protected function button1_clickHandler(event:MouseEvent):void
         {
            dispatchEvent(new Event("evento1",true,false));
         }
      ]]>
   </fx:Script>

   <fx:Declarations>
      <!-- Place non-visual elements (e.g., services, value objects) here -->
   </fx:Declarations>
   <s:Button label="Button" horizontalCenter="0" verticalCenter="0" click="button1_clickHandler(event)"/>
</s:Group>


EventPruebas.mxml (el que se ejecuta )

Código Flex :

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
            xmlns:s="library://ns.adobe.com/flex/spark" 
            xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
            creationComplete="application1_creationCompleteHandler(event)" xmlns:ns1="*">
   
   <fx:Script>
      <![CDATA[
         import mx.controls.Alert;
         import mx.events.FlexEvent;

         protected function application1_creationCompleteHandler(event:FlexEvent):void
         {
            addEventListener("evento1",MiEvento);
         }

         public function MiEvento(evt:Event):void {
            Alert.show("Evento ejecutado","Alert");
         }
         
      ]]>
   </fx:Script>
   <fx:Declarations>
      <!-- Place non-visual elements (e.g., services, value objects) here -->
   </fx:Declarations>
   <ns1:componente2 x="296" y="158">
   </ns1:componente2>
</s:Application>

Por JPNET

10 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.