Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Flash y Actionscript (http://www.forosdelweb.com/f16/)
-   -   Ayuda con addEventListener (http://www.forosdelweb.com/f16/ayuda-con-addeventlistener-608393/)

isragma 22/07/2008 17:58

Ayuda con addEventListener
 
Hola. Resulta que estoy realizando algo asi como un onClick para una lista de imagenes que se cargan dinamicamente mediante una consulta a la base de datos, es decir, si el elemento tiene como valor 1 aparece una imagen y si es 2 aparece otra, ya todo funciona exepto por que al momento de agregarle el addEventListener a la imagen le estoy pasando como parametros lo siguiente:

Código PHP:

imageA.addEventListener(MouseEvent.CLICK,function():void{myFunction(id_imagen)}); 

donde
myFunction es el metodo a llamar
id_imagen el parametro a pasar, este valor es dinámico leido de la base de datos pero siempre envia el ultimo valir leido de id_imagen.
alguna idea de como solucionarlo ???

master_of_puppetz 28/07/2008 11:24

Respuesta: Ayuda con addEventListener
 
si id_imagen es una variable que puede ser accedida desde cualquier parte del script, bastara con que hagas lo siguiente:
Código:

imageA.addEventListener(MouseEvent.CLICK, click_imageA);
private function click_imageA(e:MouseEvent):void {
    //aqui tu codigo a ejecutar en el click de imageA
}


isragma 30/07/2008 07:33

Respuesta: Ayuda con addEventListener
 
Cita:

Iniciado por master_of_puppetz (Mensaje 2509869)
si id_imagen es una variable que puede ser accedida desde cualquier parte del script, bastara con que hagas lo siguiente:
Código:

imageA.addEventListener(MouseEvent.CLICK, click_imageA);
private function click_imageA(e:MouseEvent):void {
    //aqui tu codigo a ejecutar en el click de imageA
}


NOP .. Esa id_imagen es variable y es leida desde una consulta de la base de datos, mira el código es más o menos así:

Código PHP:

for(0Query.RECORDCOUNTi++){ 
 
gridItemA = new GridItem(); 
 
gridRowA = new GridRow(); 
 
imageA = new Image(); 
 if(
Query.DATA.ESTATUS[i] == 1){ 
  
imageA.source="abierto.gif" 
imageA.addEventListener(MouseEvent.CLICK,function():void{miFuncion(Query.DA TA.ID[i])}); 
 } 
else{ 
 
imageA.source="cerrado.gif" 


gridItemA.addChild(imageA); 
gridRowA.addChild(gridItemA); 
gridItem.addChild(gridRowA); 



donde id_imagen = Query.DA TA.ID[i]

jahepi 31/07/2008 10:18

Respuesta: Ayuda con addEventListener
 
Cita:

Iniciado por isragma (Mensaje 2512720)
NOP .. Esa id_imagen es variable y es leida desde una consulta de la base de datos, mira el código es más o menos así:

Código PHP:

for(0Query.RECORDCOUNTi++){ 
 
gridItemA = new GridItem(); 
 
gridRowA = new GridRow(); 
 
imageA = new Image(); 
 if(
Query.DATA.ESTATUS[i] == 1){ 
  
imageA.source="abierto.gif" 
imageA.addEventListener(MouseEvent.CLICK,function():void{miFuncion(Query.DA TA.ID[i])}); 
 } 
else{ 
 
imageA.source="cerrado.gif" 


gridItemA.addChild(imageA); 
gridRowA.addChild(gridItemA); 
gridItem.addChild(gridRowA); 



donde id_imagen = Query.DA TA.ID[i]

Hola isragma ! :-)

Porque no extiendes la clase Image de flex para que le puedas añadir el id de la imagen, por ejemplo:

Código PHP:


package 
{
      
      
import mx.controls.Image;
      
      public class 
MyImage extends Image {
              
  
              private var 
_imageId:uint;
              
               
              public function 
get imageId():uint {
                      return 
_imageId;
              }
                
              public function 
set imageId(id:uint):void {
                      
_imageId id;
              }               
      }


Y en tu código en lugar de crear instancias de Image, creas de la clase MyImage pasándole el id de la consulta a su propiedad idImage:

Código PHP:

for(0Query.RECORDCOUNTi++){ 
 
gridItemA = new GridItem(); 
 
gridRowA = new GridRow(); 
 
imageA = new MyImage(); 
 if(
Query.DATA.ESTATUS[i] == 1){ 
  
imageA.source="abierto.gif" 
  
imageA.imageId Query.DATA.ID[i];
imageA.addEventListener(MouseEvent.CLICKonImageClick); 
 } 
else{ 
 
imageA.source="cerrado.gif" 


gridItemA.addChild(imageA); 
gridRowA.addChild(gridItemA); 
gridItem.addChild(gridRowA); 



private function 
onImageClick(evt:MouseEvent) {
      
trace(evt.target.imageId);


Saludos ! :adios:

isragma 31/07/2008 10:57

Respuesta: Ayuda con addEventListener
 
aa que te cres me da este error :

ReferenceError: Error #1069: Property imageId not found on mx.core.FlexLoader and there is no default value.
at aperturaProcesoAnteproy/::onImageClick()

sorry por molestar tanto es que apenas ando aprendiendo esto de Flex Y actionScript

Gracias por tu apoyo

jahepi 31/07/2008 12:48

Respuesta: Ayuda con addEventListener
 
Cita:

Iniciado por isragma (Mensaje 2514789)
aa que te cres me da este error :

ReferenceError: Error #1069: Property imageId not found on mx.core.FlexLoader and there is no default value.
at aperturaProcesoAnteproy/::onImageClick()

sorry por molestar tanto es que apenas ando aprendiendo esto de Flex Y actionScript

Gracias por tu apoyo

No te preocupes isragma, estamos aqui para ayudar. :-)

El depurador te dice que no encuentra la propiedad imageId, coloca un break point en la línea:

Código PHP:

trace(evt.target.imageId); 

Para colocar un break point dale doble click al lado del número de línea, te debe salir un puntito rojo.

Ahora corre tu aplicación, cuando le des click a una imagen, te va avisar el depurador, te vas a la pestaña de variables y buscas la variable llamada evt, dentro de evt debe haber una lista de propiedades, busca la propiedad target, fíjate de que tipo es, debería ser del tipo MyImage si no lo es, entonces la que guarda la referencia a MyImage es currentTarget, busca ese propiedad ahí mismo y ve si es del tipo MyImage si es asi debes cambiar a:


Código PHP:

trace(evt.currentTarget.imageId); 

Cualquier duda aqui andamos.
Saludos! :adios:

isragma 31/07/2008 14:50

Respuesta: Ayuda con addEventListener
 
Gracias de nuevo :aplauso:
Fijate que en ambos casos obtuve lo mismo, que evt es del tipo click

Código PHP:

evt flash.events.MouseEvent (@3655971)
    
altKey false
    bubbles 
true
    buttonDown 
false
    cancelable 
false
    ctrlKey 
false
    currentTarget 
MyImage (@37283c1)
    
delta 0
    eventPhase 
3
    localX 
15 [0xf]
    
localY 29 [0x1d]
    
relatedObject null
    shiftKey 
false
    stageX 
795.5
    stageY 
206 [0xce]
    
target mx.core.FlexLoader (@3690e51)
    
type "click" 

¿Crés que tal vez declaré mal algo, o el paquete o lo instancié bien? :'(

jahepi 31/07/2008 16:45

Respuesta: Ayuda con addEventListener
 
Cita:

Iniciado por isragma (Mensaje 2515189)
Gracias de nuevo :aplauso:
Fijate que en ambos casos obtuve lo mismo, que evt es del tipo click

Código PHP:

evt flash.events.MouseEvent (@3655971)
    
altKey false
    bubbles 
true
    buttonDown 
false
    cancelable 
false
    ctrlKey 
false
    currentTarget 
MyImage (@37283c1)
    
delta 0
    eventPhase 
3
    localX 
15 [0xf]
    
localY 29 [0x1d]
    
relatedObject null
    shiftKey 
false
    stageX 
795.5
    stageY 
206 [0xce]
    
target mx.core.FlexLoader (@3690e51)
    
type "click" 

¿Crés que tal vez declaré mal algo, o el paquete o lo instancié bien? :'(

Hola Isragma !

Ya lo tenemos agarrado del chongo :-)

Que bueno que pusiste lo que muestra el depurador, fíjate en esta línea:

currentTarget = MyImage (@37283c1)

La propiedad current target contiene la referencia a tu instancia MyImage, pero como se pasa como object tienes que hacer el casting para poder accesar a imageId.

Código PHP:

private function onImageClick(evt:Event):void {
      var 
image:MyImage evt.currentTarget as MyImage;
      
trace(image.imageId);


Con la palabra reservada 'as', haces el casting como puedes ver.

Nota: Es opcional hacer el casting, puedes acceder también diréctamente, pero por buena practica es bueno hacer el casting explicito para que el compilador te avise si el tipo de dato que estas tratando de convertir a otro es el correcto y evitar así errores inesperados en tiempo de ejecución:
Código PHP:

private function onImageClick(evt:Event):void {
      
trace(evt.currentTarget.imageId);



Un saludo! :adios:

isragma 31/07/2008 17:24

Respuesta: Ayuda con addEventListener
 
:aplauso:

A muchas gracias man!!!

como dicen en otros países Thanks you´ve save the day!!!.
Ya llevaba 1 semana con esta bronca y no hallaba la forma de solcucionarlo, y gracias atí si quedo, hay tanto que aún me falta aprender.

En conclusión eres muy chido :-)

Muchas Gracias por tu apoyo !!!

jahepi 31/07/2008 17:47

Respuesta: Ayuda con addEventListener
 
No es nada Isragma :-)

Estamos aqui para ayudar, cualquier duda flexera no dudes en contactarme. :arriba:

Un saludote ! :adios:

polo_W12 21/02/2010 16:20

Respuesta: Ayuda con addEventListener
 
Cita:

Iniciado por jahepi (Mensaje 2515382)
Hola Isragma !

Ya lo tenemos agarrado del chongo :-)

Que bueno que pusiste lo que muestra el depurador, fíjate en esta línea:

currentTarget = MyImage (@37283c1)

La propiedad current target contiene la referencia a tu instancia MyImage, pero como se pasa como object tienes que hacer el casting para poder accesar a imageId.

Código PHP:

private function onImageClick(evt:Event):void {
      var 
image:MyImage evt.currentTarget as MyImage;
      
trace(image.imageId);


Con la palabra reservada 'as', haces el casting como puedes ver.

Nota: Es opcional hacer el casting, puedes acceder también diréctamente, pero por buena practica es bueno hacer el casting explicito para que el compilador te avise si el tipo de dato que estas tratando de convertir a otro es el correcto y evitar así errores inesperados en tiempo de ejecución:
Código PHP:

private function onImageClick(evt:Event):void {
      
trace(evt.currentTarget.imageId);



Un saludo! :adios:

Mira buscando información sobre otro tema llegué por acá, en fin, solo quiero saber si el casting que has realizado es más válido que este otro ejemplo. Adjunto ambos.

PD: Sé que el post es antiguo pero me quedó la duda.

Código PHP:

//De ésta manera:

function clickevent(e:Event):void {
      var 
clip:MovieClip e.currentTarget as MovieClip;
      
trace(clip.name);
}

//o de ésta manera:

function clickevent(e:Event):void {
      var 
clip:MovieClip MovieClip(e.currentTarget);
      
trace(clip.name);


Saluda Atte.
Claudio Barrera Asencio.


La zona horaria es GMT -6. Ahora son las 03:19.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.