Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/10/2010, 00:17
GUILLHERMOSOFT
 
Fecha de Ingreso: marzo-2009
Ubicación: Cali (Valle) - Colombia
Mensajes: 164
Antigüedad: 15 años, 1 mes
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.