Foros del Web » Creando para Internet » Flash y Actionscript »

Envío de Parámetro en Función para el Envío de Datos en AS3 y POO

Estas en el tema de Envío de Parámetro en Función para el Envío de Datos en AS3 y POO en el foro de Flash y Actionscript en Foros del Web. Cordial Saludo Me encuentro migrando una aplicación de AS2 a AS3, en la cual tengo una serie de elementos y cada cada uno tiene asociado ...
  #1 (permalink)  
Antiguo 17/10/2010, 00:17
 
Fecha de Ingreso: marzo-2009
Ubicación: Cali (Valle) - Colombia
Mensajes: 164
Antigüedad: 15 años, 8 meses
Puntos: 2
De acuerdo Envío de Parámetro en Función para el Envío de Datos en AS3 y POO

Cordial Saludo

Me encuentro migrando una aplicación de AS2 a AS3, en la cual tengo una serie de elementos y cada cada uno tiene asociado un identificador, el cual se debe enviar una vez se da click sobre el elemento, para loc aul estoy usando la siguiente función:

public function onEnviar(obj:Event)
{
// variables a enviar
var urlVars:URLVariables = new URLVariables();
urlVars.id = "14";

// opciones para el envío
var urlRequ:URLRequest = new URLRequest("paypal.php");
urlRequ.method = URLRequestMethod.POST;
urlRequ.data = urlVars;

// envío y detección de la respuesta
var urlLoad:URLLoader = new URLLoader();
urlLoad.load(urlRequ);

navigateToURL(urlRequ);
}

y al momento de llamar la función genero la siguiente línea

c141.addEventListener(MouseEvent.CLICK, onEnviar);

en la cual "c141" es el nombre de instancia que le asigné al elemento y el "14" en la quinta línea (urlVars.id = "14";), donde construyo la función, es el identificador asociado al elemento, necesito dejar este valor (número) variable, no fijo, para lo cual es necesario pasárselo a la función como un parámetro, pues el objetivo de crear funciones es reutilizar código, por lo cual no sería adecuado generar la misma función pero con nombre diferente para cada una de las instancia de mi aplicación, ante lo cual sería necesario que la función quedara más ó menos así:

public function onEnviar(obj:Event,identificadorInstancia)
{
// variables a enviar
var urlVars:URLVariables = new URLVariables();
urlVars.id = identificadorInstancia;

// opciones para el envío
var urlRequ:URLRequest = new URLRequest("paypal.php");
urlRequ.method = URLRequestMethod.POST;
urlRequ.data = urlVars;

// envío y detección de la respuesta
var urlLoad:URLLoader = new URLLoader();
urlLoad.load(urlRequ);

navigateToURL(urlRequ);
}

y al momento de llamar la función:

c141.addEventListener(MouseEvent.CLICK, onEnviar(14));//En el caso de la instancia "c141"

c151.addEventListener(MouseEvent.CLICK, onEnviar(15));//En el caso de la instancia "c151"

c161.addEventListener(MouseEvent.CLICK, onEnviar(16));//En el caso de la instancia "c161"

c171.addEventListener(MouseEvent.CLICK, onEnviar(17));//En el caso de la instancia "c171"

y así sucesivamente por cada instancia, pero al dar Ctrl+Enter se me imprime el siguiente error:

Main.as, Línea 98
1120: Acceso a una propiedad identificadorInstancia no definida.
c141.addEventListener(MouseEvent.CLICK, onEnviar(identificadorInstancia));

Main.as, Línea 98
1136: Número de argumentos incorrecto. Se esperaba 2.
c141.addEventListener(MouseEvent.CLICK, onEnviar(identificadorInstancia));

Vale la pena aclarar que Main.as es el nombre del archivo en el cual estoy manejando mi código y la línea 98 es desde donde llamo la función, es decir la que dice:

c141.addEventListener(MouseEvent.CLICK, onEnviar(identificadorInstancia));

Estoy trabajando en POO, todo mi código es el siguiente:


/*
*************************************
* ToolTip
* http://www.FlepStudio.org
* © Author: Filippo Lughi
* version 1.0
*************************************
*/
package
{
import flash.display.*;
import flash.events.*;
import flash.text.*;
import org.FlepStudio.ToolTip;

import flash.display.MovieClip;
import flash.net.*;


public class Main extends MovieClip
{
private var tool_tip:ToolTip;

private var clips_array:Array;

public var parametro14:String;


public function getFlashVars()
{
try
{
var paramObj:Object = LoaderInfo( this.root.loaderInfo ).parameters;
return( paramObj );
}
catch ( e:Error )
{
trace( "Error getting FlashVars" );
}
}

public function onEnviar(obj:Event,identificadorInstancia)
{
// variables a enviar
var urlVars:URLVariables = new URLVariables();
urlVars.id = identificadorInstancia;

// opciones para el envío
var urlRequ:URLRequest = new URLRequest("paypal.php");
urlRequ.method = URLRequestMethod.POST;
urlRequ.data = urlVars;

// envío y detección de la respuesta
var urlLoad:URLLoader = new URLLoader();
urlLoad.load(urlRequ);

navigateToURL(urlRequ);
}

public function Main()
{
addEventListener(Event.ADDED_TO_STAGE,init);

parametro14=getFlashVars().valor14;
parametro14 = (parametro14 != null)?parametro14:"no se ha recibido la variable valor14"; //Este parámetro tendrá el valor de valor14

if(parametro14=="0"){
c141.visible = true;
c142.visible = false;
}

else{
c141.visible = false;
c142.visible = true;
}

}

private function init(evt:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE,init);

stage.frameRate=31;

clips_array=new Array(clip_1_mc,clip_2_mc,clip_3_mc,clip_4_mc,c141 );

for(var i:int=0;i<clips_array.length;i++)
{
clips_array[i].mouseChildren=false;
clips_array[i].buttonMode=true;
clips_array[i].addEventListener(MouseEvent.MOUSE_OVER,onClipOver );
clips_array[i].addEventListener(MouseEvent.MOUSE_OUT,onClipOut);
}
}

private function onClipOver(evt:MouseEvent):void
{
c141.addEventListener(MouseEvent.CLICK, onEnviar(identificadorInstancia));

switch(evt.target)
{
case clip_1_mc:
if(parametro14=="1")
{
tool_tip=new ToolTip(0xFFCC00,0x000000,12,"Arial",'<b>Lorem ipsum GUILLERMO</b> dolor sit amet, consectetuer.'+'\n'+
'Morbi a lorem quis sapien tincidunt adipiscing. Proin vel sapien.');
}
else
{
tool_tip=new ToolTip(0xFFFFFF,0x000000,12,"Arial",parametro14);
//fondo, color fuente
}
addChild(tool_tip);
break;

case clip_2_mc:
tool_tip=new ToolTip(0xFFFFFF,0x000000,12,"Arial",'LUIS Lorem ipsum dolor sit amet, consectetuer.'+'\n'+
'Morbi a lorem quis sapien tincidunt adipiscing. Proin vel sapien.');
addChild(tool_tip);
break;

case clip_3_mc:
tool_tip=new ToolTip(0xFFFFFF,0x000000,12,"Arial",'LÓPEZ Ciao Ciao Ciao');
addChild(tool_tip);
break;

case clip_4_mc:
tool_tip=new ToolTip(0xFFFFFF,0x000000,12,"Arial",'TREJO<b>Lore m ipsum</b> dolor sit amet, consectetuer.'+'\n'+
'Morbi a lorem quis sapien tincidunt adipiscing. Proin vel sapien.');
addChild(tool_tip);
break;

case c141:
tool_tip=new ToolTip(0xFFFFFF,0x000000,12,"Arial",'Separa Casa 14');
addChild(tool_tip);
break;
}

}

private function onClipOut(evt:MouseEvent):void
{
if(tool_tip!=null)
{
tool_tip.destroy();
tool_tip=null;
}
}
}
}


No lo había puesto antes, ya que únicamente me había dedicado a postear la parte de código involucrada en el problema (ya que el resto del código hace referencia a cosas diferentes de lo que estoy mencionando en este tema), pues el resto aún las librerías que se llaman no tienen error alguno, pues antes de la modificación mencionada todo funciona bien y sin contratiempo.

Más necesito que dicho valor quede variable en mi función, les agradecería muchísimo si por favor me pueden colaborar, ya que es lo único que me falta y me ha tenido unas buenas horas frente al computador sin obtener los resultados esperados.

  #2 (permalink)  
Antiguo 17/10/2010, 04:26
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: Envío de Parámetro en Función para el Envío de Datos en AS3 y POO

Hola
que tal cali ve??

bueno, pregunto, en que parte se le esta dando un
identificador a cada movieclip???
según veo se esta es enviando un parámetro
directamente a una función

bueno, hay muchas formas (ya discutidas en temas de este foro)
pero por ej algo bastante acorde a lo que quieres podría ser esto

Código actionscript:
Ver original
  1. clip1.addEventListener(MouseEvent.CLICK, function(){test(1)});
  2. clip2.addEventListener(MouseEvent.CLICK, function(){test(2)});
  3.  
  4. function test(id:Number):void{
  5.     trace(id);
  6. //resto de código que se necesite
  7. }
  8.  
  9. //otro modo, usando ids
  10. a.id = 1
  11. b.id = 2
  12.  
  13. a.addEventListener(MouseEvent.CLICK, test);
  14. b.addEventListener(MouseEvent.CLICK, test);
  15. function test(e:MouseEvent):void{
  16.     trace(e.target.id)
  17. }

saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #3 (permalink)  
Antiguo 18/10/2010, 21:47
 
Fecha de Ingreso: marzo-2009
Ubicación: Cali (Valle) - Colombia
Mensajes: 164
Antigüedad: 15 años, 8 meses
Puntos: 2
De acuerdo Respuesta: Envío de Parámetro en Función para el Envío de Datos en AS3 y POO

Hola, Cali muy bien gracias.

La idea es asignar el identificador de cada instancia (clip de película) al momento de que desde esta se llame la función (ver código) ¿comprendes?

nombreInstancia.addEventListener(MouseEvent.CLICK, onEnviar(identificadorInstancia));

c141.addEventListener(MouseEvent.CLICK, onEnviar(14));//Aquí se está llamando la función desde la instancia (clip de película) "c141" y se le pada el identificador "14"

Mira, ya hice la modificación de acuerdo a tu explicación, quedando mi código de la siguiente manera:

Función

public function onEnviar(obj:Event,id:Number)
{
// variables a enviar
var urlVars:URLVariables = new URLVariables();
urlVars.id = id;

// opciones para el envío
var urlRequ:URLRequest = new URLRequest("paypal.php");
urlRequ.method = URLRequestMethod.POST;
urlRequ.data = urlVars;

// envío y detección de la respuesta
var urlLoad:URLLoader = new URLLoader();
urlLoad.load(urlRequ);

navigateToURL(urlRequ);
}

Llamado de la función:

c141.addEventListener(MouseEvent.CLICK, onEnviar(id(14)));

Sin embargo se me imprimen los dos sigueintes mensajes de error:

1180: Llamada a un método id posiblemente no definido.
c141.addEventListener(MouseEvent.CLICK, onEnviar(id(14)));

1136: Número de argumentos incorrecto. Se esperaba 2.
c141.addEventListener(MouseEvent.CLICK, onEnviar(id(14)));

Ambos se refieren a la línea 100 que es la que dice:

c141.addEventListener(MouseEvent.CLICK, onEnviar(id(14)));

Por lo cual agradecería si puedes revisar mi código y hecharme una mano, ya que veo que la función hace referencia a dos parámetros más cuando llamaba la función anteriormente sin meter el 2do parámetro, nunca tuve que hacer referencia al primer parámetro cuando la llamaba ¿por qué será que ahora si el mensaje hace referencia a que falta un parámetro al referenciar uno cuando antes al haber uno y no se imprimían errores al no referenciarlo al llamar la función?

Estaré muy agradecido si por favor me ayudas un poco con esto, ya que me siento un poco desconcertado.

Última edición por GUILLHERMOSOFT; 18/10/2010 a las 22:05
  #4 (permalink)  
Antiguo 19/10/2010, 00:05
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: Envío de Parámetro en Función para el Envío de Datos en AS3 y POO

ehm, pues creo que no me entendiste....
llevado a tu caso sería así

c141.addEventListener(MouseEvent.CLICK, onEnviar(14));

y tu función

public function onEnviar(id:Number)
{

asi debería funcionar

pues el problema es que espera también el evento, cosa que no
estas enviando, se puede hacer también, pero en tu caso
no estas usando lo que recibirias para nada, así que
yo lo dejaría como acabo de indicarte

prueba y comenta
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #5 (permalink)  
Antiguo 19/10/2010, 16:02
 
Fecha de Ingreso: marzo-2009
Ubicación: Cali (Valle) - Colombia
Mensajes: 164
Antigüedad: 15 años, 8 meses
Puntos: 2
De acuerdo Respuesta: Envío de Parámetro en Función para el Envío de Datos en AS3 y POO

Hola amigo, fijate que lo dejo tal y como tu explicación lo indica, sin embargo me vota el siguiente letrero de error:

TypeError: Error #2007: El valor del parámetro listener debe ser distinto de null.
at flash.events::EventDispatcher/addEventListener()
at Main/::onClipOver()

Agradecería nuevamente tu ayuda.
  #6 (permalink)  
Antiguo 19/10/2010, 18:22
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: Envío de Parámetro en Función para el Envío de Datos en AS3 y POO

pues he revisado y ese error es nuevo si mal no me equivoco,
pregunto entonces, probaste el código que te sugerí en
un fla totalmente nuevo?

si no es así, prueba y comenta
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #7 (permalink)  
Antiguo 25/10/2010, 14:18
 
Fecha de Ingreso: marzo-2009
Ubicación: Cali (Valle) - Colombia
Mensajes: 164
Antigüedad: 15 años, 8 meses
Puntos: 2
De acuerdo Respuesta: Envío de Parámetro en Función para el Envío de Datos en AS3 y POO

JAJAJAJAJAJAJAAAAAAAA............ gracias a Dios por fin pude corregir el error, mi función quedó:

public function onEnviar(identificador:int)
{
// variables a enviar
var urlVars:URLVariables = new URLVariables();
urlVars.id = identificador;

// opciones para el envío
var urlRequ:URLRequest = new URLRequest("paypal.php");
urlRequ.method = URLRequestMethod.POST;
urlRequ.data = urlVars;

// envío y detección de la respuesta
var urlLoad:URLLoader = new URLLoader();
urlLoad.load(urlRequ);

navigateToURL(urlRequ);
}

y el llamado a la misma

c141.addEventListener(MouseEvent.CLICK,function(){ onEnviar(14)}); //Donde c141 es el nombre de mi instancia (movieClip) y 14 el id ó número que envío.

http://www.esedeerre.com/webphp/scripts/AS.php?id=9&post=20

Igualmente gracias por tu ayuda mortiprogramador.

Última edición por GUILLHERMOSOFT; 25/10/2010 a las 14:24
  #8 (permalink)  
Antiguo 25/10/2010, 20:11
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: Envío de Parámetro en Función para el Envío de Datos en AS3 y POO

Cita:
Iniciado por GUILLHERMOSOFT Ver Mensaje
JAJAJAJAJAJAJAAAAAAAA............ gracias a Dios por fin pude corregir el error, mi función quedó:

public function onEnviar(identificador:int)
{
// variables a enviar
var urlVars:URLVariables = new URLVariables();
urlVars.id = identificador;

// opciones para el envío
var urlRequ:URLRequest = new URLRequest("paypal.php");
urlRequ.method = URLRequestMethod.POST;
urlRequ.data = urlVars;

// envío y detección de la respuesta
var urlLoad:URLLoader = new URLLoader();
urlLoad.load(urlRequ);

navigateToURL(urlRequ);
}

y el llamado a la misma

c141.addEventListener(MouseEvent.CLICK,function(){ onEnviar(14)}); //Donde c141 es el nombre de mi instancia (movieClip) y 14 el id ó número que envío.

http://www.esedeerre.com/webphp/scripts/AS.php?id=9&post=20

Igualmente gracias por tu ayuda mortiprogramador.
como que gracias a ese otro ente!!! y yo que!!!
jajajajaja, en fin, que genial que ya te funcione
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Etiquetas: poo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:55.