Comunidad de diseño web y desarrollo en internet online

ayuda con este ejemplo de eventos personalizados

Citar            
MensajeEscrito el 05 Ago 2009 06:34 am
bueno como me ha ganado por cansancio este tema de los eventos,y lo peor es que creo que me e aproximado bastante si alguien me corrije se lo agradecere!!!!
tengo un mxml y un tittle window,es simple tengo un evento personalizado qe recive un parametro y se lo manda al tittlewindow para que haga lo suyo... pero bueno,me e quedado plantadaso y al parecer todo esta bien,inclusive no me tira error flex ni nada ,pero nunca llega a llamarle la funcion que esta en el addlistener. aqui va el codigo

este es el codigo basico de mi componente que larga la aplicacion del tittle window
nombre : buzonEntrada.mxml

Código Flex :

                <mx:Metadata>
         [Event(name="miEvento",type="events.IdEvent")]
      </mx:Metadata>



Código ActionScript :

import events.IdEvent;

var enviar:int;
enviar = dataGrid.selectedItem[4];
var o:IdEvent = new IdEvent("miEvento",enviar);
dispatchEvent(o);
var abriendo:IFlexDisplayObject = PopUpManager.createPopUp(this, leerMensaje, true);
abriendo.x = 250;          
abriendo.y = 20;


este es mi evento personalizado IdEvent.as

Código ActionScript :

package events
{
   import flash.events.Event;
   public class IdEvent extends Event {
      public  static var idBusqueda:int = 10;
      
      public function IdEvent(type:String, idBusqueda:int ){
      
         super(type,true);
         //this.idBusqueda = idBusqueda; 
                       //esta comentada  esta linea porque estube probando con estatico,pero creo que da igual
      }
      
      public override function clone():Event{
         return new IdEvent(type, idBusqueda);
      }
   }
}


y este es mi tittle window donde recibo deberia recibir la variable

Código ActionScript :

                       
                        import events.IdEvent;
                        public var v:buzonEntrada; //instancia de el componenten buzonEntrada.mxml

         public function init():void
                        {
          v = new buzonEntrada();
         v.addEventListener("miEvento",pruebaDeEvento); //agrego el listener
                       }

                      public function pruebaDeEvento(event:IdEvent):void //nunca entra a esta funcion
                      {
            t.text = "llega";//en caso de que aparezca este texto,inmediatamente lo borro,no me         

                                //anda  debugger de flex... :S desde que instale el  flash player 10
            t.text=  event.idBusqueda.toString();
         }



esto es basicamente lo que es importante,o sea lo que va con los eventos... que me esta fallando??? alguien me dice??
ya me tiene un poquitin cansado esto jejeje

Por viru2k

20 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Ago 2009 11:46 am
Estás agregando un listener a un componente MXML que tiene un code en un sitio inespecífico, luego tampoco veo que sea agregado al displayList, solo instanciado. Agrégalo al displayList y haz correr el dispatchEvent en algún evento detectable, por ejemplo el creationComplete

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 05 Ago 2009 05:51 pm
la verdad no me a quedado muy claro eso del displayList.y el dispatchevent esta arriba,que despacha ese evento personalizado,que a su vez esta dentro de una funcion que general el tittlewindow,no la puse porque si no tendria que poner todo el codigo de los 2 components,y son largos.
dame un ejemplo de lo que deberia hacer,no me ha quedado muy claro

Por viru2k

20 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Ago 2009 03:53 am
ok ok.estube probando con el debugger en mi aplicacion y hasta el momento,se pasan los parametros al evento,entonces.... solo me faltaria tomarlos en el titlewindow,hay esta mas facil!.me ayudan???

Por viru2k

20 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Ago 2009 10:42 am
En buzonEntrada.mxml, agrega en el nodo raíz

creationComplete="init()"

Luego dentro del tag script

Código ActionScript :

private function init():void{
  var enviar:int;
  enviar = dataGrid.selectedItem[4]; 
  var o:IdEvent = new IdEvent("miEvento",enviar); 
  dispatchEvent(o); 
  var abriendo:IFlexDisplayObject = PopUpManager.createPopUp(this, leerMensaje, true); 
  abriendo.x = 250;           
   abriendo.y = 20; 
}


Ahora ya tienes un punto específico donde se genera el evento. El evento creationComplete se dispara cuando el componente se renderea en pantalla (o sea es agregado el displayList y se hace visible)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 06 Ago 2009 04:10 pm
ok ok,el problema no creo que este aqui... :S porque el evento si recibe los valores de este mxml pero igual pongo todo el codigo aca, la funcion que despacha el evento es la ultima en el block mx:Script

Código Flex :

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="874" height="674">
   <mx:Panel x="10" y="10" width="739" height="510" layout="absolute" title="Bandeja de entrada : Nuevos" horizontalAlign="left" initialize="init();">
      
      <mx:DataGrid  x="10" y="10" width="697" height="450"  id="dataGrid" editable="false"  >
                  <mx:columns>
            <mx:DataGridColumn headerText="id" dataField="5" visible="false"    />
            <mx:DataGridColumn headerText="De:" dataField="1"  width="100"/>
            <mx:DataGridColumn  width="200" headerText="Asunto" dataField="0"  />
            <mx:DataGridColumn width="80" headerText="Fecha" dataField="2"/>
            <mx:DataGridColumn width="100"  headerText="Importancia" dataField="5"/>
            <mx:DataGridColumn  width = "55" headerText="" dataField="7">
            <mx:itemRenderer>
               <mx:Component>
                  <mx:VBox horizontalScrollPolicy="off" verticalScrollPolicy="off" paddingLeft="7">
                     <mx:Button label="leer" click="dispatchEvent(new Event('abrirVentana',true))" />
                  </mx:VBox>
               </mx:Component>
            </mx:itemRenderer>
         </mx:DataGridColumn>
            <mx:DataGridColumn  width = "50" headerText="" dataField="4">
            <mx:itemRenderer>
               <mx:Component>
                  <mx:VBox horizontalScrollPolicy="off" verticalScrollPolicy="off" paddingLeft="4">
                     <mx:Button  click="dispatchEvent(new Event('deleteRow', true))" icon="@Embed(source='../iconos/bin.png')" />
                     
         
                  </mx:VBox>
               </mx:Component>
            </mx:itemRenderer>
         </mx:DataGridColumn>
         
         </mx:columns>
      </mx:DataGrid>
   </mx:Panel>
   <mx:RemoteObject id="setLeido"
        destination="GenericDestination"
        source="flex.javac.inserta"
        showBusyCursor="true"
        fault="onFault(event)">
        <mx:method name="updateMailjerarquico" result="updateMailjerarquico_Result(event)"/>
        </mx:RemoteObject>
   <mx:RemoteObject id="getMensajeCLeido"
        destination="GenericDestination"
        source="flex.javac.consulta"
        showBusyCursor="true"
        fault="onFault(event)">
        <mx:method name="getMensajeJerarquico" result="getMensajeJerarquico_Result(event)"/>
        </mx:RemoteObject>
      <mx:Metadata>
         [Event(name="mi",type="events.IdEvent")]
      </mx:Metadata>
<mx:Script>
           <![CDATA[
           import events.IdEvent;
              import mx.core.IFlexDisplayObject;
              import windows.leerMensaje;          
              import mx.rpc.events.ResultEvent;
              import mx.rpc.events.ResultEvent;
      import mx.rpc.events.FaultEvent;
      import mx.rpc.*;
          import mx.collections.ArrayCollection;
          import mx.controls.Alert;
          import mx.events.CloseEvent;
          import mx.core.Application;
          import mx.managers.PopUpManager;
           import windows.*;
      private var combofac:ClassFactory;
      private var cadena:Array;
      private var leido:int;
      private var eliminado:int;
      private var nombre_:String;
      private var fila:String; 
      private var cadenaNueva:Array;
      private var ventana:leerMensaje;
      private var imprime:Boolean;      
      private function init():void{
         refrescar();
         imprime = false;
      dataGrid.addEventListener("abrirVentana", sendId);
        dataGrid.addEventListener("deleteRow", deleteRowHandler);
         leido = 0;
         eliminado = 0;
         nombre_ =Application.application.nombre.toString();         
        getMensajeCLeido.getMensajeJerarquico(leido,eliminado,nombre_);
      }                
      public function getMensajeJerarquico_Result(event:ResultEvent):void{
         cadena = event.result as Array;
         dataGrid.dataProvider = cadena;              
      }
      public function onFault(event:FaultEvent):void{
            Alert.show(event.fault.faultString,"error");
          }
     private function refrescar():void{
    
    getMensajeCLeido.getMensajeJerarquico(leido,eliminado,nombre_);
     }
 
     private function updateMailjerarquico_Result(event:ResultEvent):void{
        var resultado:int = event.result as int;
        if (resultado != 0){
        getMensajeCLeido.getMensajeJerarquico(leido,eliminado,nombre_);
        }else{
           Alert.show("No se pudo eliminar el mensaje","Error al eliminar");
        }
     }
     // MANEJADO MEDIANTE EVENTOS 
      private function deleteRowHandler(event:Event):void
            {
               var indice:int;
               var leido_:int = 1;
            var elimiminado_:int = 1;
            
               indice = dataGrid.selectedItem[4].toString();
            
              setLeido.updateMailjerarquico(indice,leido_,elimiminado_);
            }
            
        public function sendId(event:Event):void{
            var enviar:int;
            var leido_:int = 1;
         var elimiminado_:int = 0;
            enviar = dataGrid.selectedItem[4];
            var o:IdEvent = new IdEvent("mi",enviar);
          this.dispatchEvent(o);
            var abriendo:IFlexDisplayObject = PopUpManager.createPopUp(this, leerMensaje, true);
            leerMensaje(abriendo).ID = enviar; 
            leerMensaje(abriendo).tipo = 2; // paso el valor para decirle que tiene que llamar al remote object jerarquico
         leerMensaje(abriendo).imprimir = imprime ;
         PopUpManager.centerPopUp(abriendo);    
          abriendo.x = 250;
          abriendo.y = 20;                            setLeido.updateMailjerarquico(enviar,leido_,elimiminado_);                                
          }
                ]]>
        </mx:Script>
   <mx:HBox x="247" y="528" width="502" height="48" horizontalAlign="right" verticalAlign="middle">
      <mx:TextInput id="t"/>
      <mx:Button label="Actualizar mensajes" id="cmdRefrescar" click="refrescar()" >
         <mx:icon>@Embed(source='../iconos/arrow_rotate_anticlockwise.png')</mx:icon>
      </mx:Button>
   </mx:HBox>
           
</mx:Canvas>



Y ESTA ES LA DEL TITTLE WINDOW la cual en init agrego un action listener...

Código Flex :

<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" width="596" showCloseButton="true" close="PopUpManager.removePopUp(this);" creationComplete="init()"  height="570">
      <mx:HBox width="566" height="59" borderStyle="outset" xmlns:v="componentes.*" >
            <mx:HBox width="397" height="55">
               <mx:VBox height="48" width="59">
                  <mx:Label width="55" text="      De:" fontFamily="Verdana" fontWeight="bold"/>
                  <mx:Label text="Asunto :" fontWeight="bold" fontFamily="Verdana"/>
               </mx:VBox>
               <mx:VBox width="263" height="48">
                  <mx:Text width="245" id="Remitente"/>
                  <mx:Label id="Asunto" width="246"/>
               </mx:VBox>
            </mx:HBox>
            <mx:VBox width="151" height="48">
                  <mx:HBox width="143">
                        <mx:Label text="Fecha :" fontWeight="bold" fontFamily="Verdana"/>
                        <mx:Label width="85" id="Fecha"/>
                  </mx:HBox>
                  <mx:HBox width="142">
                        <mx:Label text="Hora :" fontWeight="bold" fontFamily="Verdana"/>
                        <mx:Label width="91" id="Hora"/>
                  </mx:HBox>
            </mx:VBox>
      </mx:HBox>
      
      <mx:VBox width="566" height="413"  borderColor="#262626" borderStyle="inset">
            <mx:Text width="554" height="401"  id="Mensaje"/>
      </mx:VBox>
      <mx:TextInput id="t"/>
      <mx:Button label="Imprimir mensaje"  click="imprime()" icon="@Embed(source='../iconos/printer.png')"/>
      
   <mx:RemoteObject id="getMensajeT"
        destination="GenericDestination"
        source="flex.javac.consulta"
        showBusyCursor="true"
        fault="onFault(event)">
        <mx:method name="getMensajeTextoJerarquico" result="getMensajeTextoJerarquico_Result(event)"/>
        </mx:RemoteObject>
        <mx:RemoteObject id="getMensajeTc"
        destination="GenericDestination"
        source="flex.javac.consulta"
        showBusyCursor="true"
        fault="onFault(event)">
        <mx:method name="getMensajeTextoComun" result="getMensajeTextoComun_Result(event)"/>
        </mx:RemoteObject>
  
   <mx:Script>
        <![CDATA[         
           import mx.printing.FlexPrintJob;
           import events.IdEvent;              
           import mx.rpc.events.FaultEvent;
          import mx.rpc.events.ResultEvent;
          import mx.rpc.*;
          import mx.collections.ArrayCollection;
          import mx.controls.Alert;
                import mx.managers.PopUpManager;
                import mx.controls.Text; 
                import mx.core.Application;
              import componentes.*;
              
              public var nada:IdEvent;
         public var cadena:Array;
         public var ID:int;
         public var tipo:int;
         public var imprimir:Boolean ;         
         [Bindable] public var v:buzonEntrada;
         public function init():void{
          v = new buzonEntrada();
          
      v.addEventListener("mi",pruebaDeEvento);      
         if (tipo == 2){
            getMensajeT.getMensajeTextoJerarquico(ID);
         }
         if (tipo == 1){
            getMensajeTc.getMensajeTextoComun(ID);
         }
         }                                            
         public function getMensajeTextoJerarquico_Result(event:ResultEvent):void{
            cadena = event.result as Array;
            Asunto.text = cadena[0];
            Remitente.text = cadena[1];
            Fecha.text = cadena[2];
            Hora.text = cadena[3];
            Mensaje.htmlText = cadena[4];      
            if (imprimir == true){
               imprime();
            }   
         }   
         public function getMensajeTextoComun_Result (event:ResultEvent):void{
            cadena = event.result as Array;
            Asunto.text = cadena[0];
            Remitente.text = cadena[1];
            Fecha.text = cadena[2];
            Hora.text = cadena[3];
            Mensaje.htmlText = cadena[4];
            if (imprimir == true){
               imprime();
            }
         }               
            public function onFault(event:FaultEvent):void{
               Alert.show(event.fault.faultString,"error");
            }               
            public function iniciaMensaje(event:buzonEntradaNuevosComun):void{
            Remitente.text = buzonEntradaNuevosComun as String;
            }
            public function imprime():void{
               var pj:FlexPrintJob = new FlexPrintJob();             
             if(pj.start() != true)
             {
                return;
             }
             var ventana:leerMensaje = new leerMensaje(); 
             this.addChild(ventana);
             pj.addObject(ventana);             
             pj.send();
             this.removeChild(ventana);          
          }          
          //para prueba de eventos
         public function pruebaDeEvento(event:IdEvent):void{
            t.text=  event.idBusqueda.toString();
         }
        ]]>
    </mx:Script>
</mx:TitleWindow>

Por viru2k

20 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Ago 2009 04:48 pm
Vaya ... un poco de código para revisar ... en cuanto tenga un rato lo miro ;)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

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