Es que la clase Delegate de Macromedia no permite pasar parámetros, yo
uso la de Steve Webster :-P
Con esta sí que puedes hacer lo que comentas:
miboton.onPress = Delegate.create(this,trazar,1)
<code>
class util.Delegate {
public static function create(target:Object,
handler:Function):Function {
// Get any extra arguments for handler
var extraArgs:Array = arguments.slice(2);
// Create delegate function
var delegate:Function = function() {
// Get reference to self
var self:Function = arguments.callee;
// Augment arguments passed from broadcaster with additional
args
var fullArgs:Array = arguments.concat(self.extraArgs, [self]);
// Call handler with arguments
return self.handler.apply(self.target, fullArgs);
};
// Pass in local references
delegate.extraArgs = extraArgs;
delegate.handler = handler;
delegate.target = target;
// Return the delegate function.
return delegate;
}
}
</code>
Un saludo
Felipe Fernandez Sanchez escribió:
Gracias, eres un mounstruo. Le daré un par de vueltas a ver que hago
al final.
Por otra parte y respecto a "Lo del Delegate debe funcionar" pues
efectivamente estoy de acuerdo contigo pero en este mundo del flash
nada es lo que parece y la realidad supera a la ficción. El import
del Delegate sí que lo tengo hecho, lo que pasa es que tampoco se como
pasarle parámetros. Es decir, si tengo:
miboton.onPress = Delegate.create(this,trazar)
¿cómo hago para pasarle parámetros a la función trazar?
Con:
miboton.onPress = Delegate.create(this,trazar(1))
Llama a la función directamente sin presionar el botón siquiera
Con:
miboton.onPress = Delegate.create(this,trazar,1)
Llama al pulsar pero el 1 no se lo pasa a la función.
Más que nada ya por curiosidad y porque fijo que me puede hacer falta
en algún caso...
Un saludo.
From: Miguel Angel Sánchez <[EMAIL PROTECTED]>
Reply-To: asnativos@5dms.com
To: asnativos@5dms.com
Subject: Re: [ASNativos] onPress y llamadas a funciones
Date: Mon, 13 Feb 2006 12:46:31 +0100
Lo del Delegate debe funcionar, tan solo hay que hacer el import
correspondiente: mx.utils.Delegate, pero como decía antes creo que es
bastante mejor usar el EventDispatcher, te va a resultar mucho más
flexible y dejas tu clase como una caja negra que la única
información que recibe del exterior son los parámetros de
configuración. Para lo que tú quieres sería algo así:
<code>
import mx.events.EventDispatcher;
import mx.utils.Delegate;
class Ventana {
//variables que requiere EventDispatcher
public var addEventListener:Function;
public var removeEventListener:Function;
private var dispatchEvent:Function;
public function Ventana(...):Void {
EventDispatcher.initialize(this); //Inicializa las
funciones declaradas arriba
...
botonAceptar.onPress = Delegate.create(this, aceptarPressed);
}
private function aceptarPressed():Void {
//disparamos el evento
//target es una referencia al objeto que lanza el evento (this)
//type es el nombre del evento
//podemos enviar otros tantos parámetros como queramos, o ninguno
dispatchEvent({target:this, type:"onAceptar", param1:valor1,
param2:valor2 ... paramN:valorN);
}
...
}
</code>
Luego puedes definir oyentes para los eventos en otras clases
<code>
var v:Ventana = new Ventana(1, "AVISO DE ERROR");
v.addEventListener("onAceptar", Delegate.create(this, accionesAceptar));
v.addEventListener("onCancelar", Delegate.create(this,
accionesCancelar));
function accionesAceptar(eventObject:Object):Void {
//eventObject es el objeto que contiene las propiedades target,
type, param1, param2... definidas al disparar el evento con
dispatchEvent
trace("Evento " + eventObject.type + " capturado");
trace("El valor de param1 es " + eventObject.param1);
}
</code>
Y esto es todo, espero que te sirva de ayuda, un saludo
Felipe Fernandez Sanchez escribió:
Muchas gracias, lo del Delegate ya lo había probado también y que si
quieres arroz Catalina. Si se te ocurre alguna cosa más....De todas
formas, lo que trato de hacer es una clase para una ventana de
mensajes, al que se le puede decir en el constructor el tipo de
ventana (aviso, error, info), el numero de botones a mostrar y las
FUNCIONES (y aquí viene el problema que me ocupa) asociadas a cada
uno de ellos. De forma que si yo quiero mostrar desde otra clase una
ventana de aviso haga:
new Ventana(1,"AVISO DE ERROR",["aceptar""],[onAceptar])
Esto hace que aparezca una ventana de error con un botón Aceptar y
que cuando se pulse dicho botón se ejecute la función onAceptar de
la clase llamante. Pero mi problema ahora es cómo llamar a esas
funciones con parámetros (pasados en otro Array al constructor).
Ahora que tienes toda la información sigues pensando que es
conveniente lo del EventDispatcher?
En ese caso harías el favor de explicarlo un poco más.
Gracias, por cierto.
From: Miguel Angel Sánchez <[EMAIL PROTECTED]>
Reply-To: asnativos@5dms.com
To: asnativos@5dms.com
Subject: Re: [ASNativos] onPress y llamadas a funciones
Date: Mon, 13 Feb 2006 11:13:38 +0100
La solución del EventDispatcher la veo más correcta y flexible, te
permite añadir/eliminar oyentes a los eventos, en lugar de
pasárselos todos por parámetro en el constructor, pero si quieres
seguir por donde ibas, haz un 'wrapper' para el onPress y luego
llamas a la función con los parámetros que quieras
miboton.onPress = Delegate.create(this, callFunction);
private function callFunction():Void {
funciones[0](parametro1, parametro2, ...);
}
Felipe Fernandez Sanchez escribió:
Si, pero alguna solución más sencilla no existe? Porque no me creo
que no se pueda hacer lo que estoy intentando....
From: Miguel Angel Sánchez <[EMAIL PROTECTED]>
Reply-To: asnativos@5dms.com
To: asnativos@5dms.com
Subject: Re: [ASNativos] onPress y llamadas a funciones
Date: Mon, 13 Feb 2006 10:18:14 +0100
Felipe Fernandez Sanchez escribió:
Hola, agradecería que me echarais una mano con lo siguiente:
Tengo un símbolo Botón e intento asociarle una función al
evento onPress. Después de comprobar que el addEventListener
para este objeto no funciona, lo hice con:
El addEventListener no funciona para el botón, pero puedes
encapsular el botón dentro de una clase que haga uso de
EventDispatcher y dispare un evento cuando salte el onPress,
luego registras oyentes para ese evento y ya lo tienes, sin líos
de arrays de funciones, parámetros y ámbitos (existe esta palabra
en español, Ale, xD )
----------------------------------
Lista ASNativos:asnativos@5dms.com
http://www.5dms.com/listas
----------------------------------
----------------------------------
Lista ASNativos:asnativos@5dms.com
http://www.5dms.com/listas
----------------------------------
----------------------------------
Lista ASNativos:asnativos@5dms.com
http://www.5dms.com/listas
----------------------------------
----------------------------------
Lista ASNativos:asnativos@5dms.com
http://www.5dms.com/listas
----------------------------------
----------------------------------
Lista ASNativos:asnativos@5dms.com
http://www.5dms.com/listas
----------------------------------
----------------------------------
Lista ASNativos:asnativos@5dms.com
http://www.5dms.com/listas
----------------------------------
----------------------------------
Lista ASNativos:asnativos@5dms.com
http://www.5dms.com/listas
----------------------------------