Comunidad de diseño web y desarrollo en internet online

Como llamar funciones de componente a componente en Flash

Citar            
MensajeEscrito el 10 Sep 2010 05:51 pm
Hola a todos

Bueno les agradezco si me ayudan he creado una aplicacion en Flash Builder 4 y cree 2 componentes personalizados, cada uno tiene funciones, ¿como puedo acceder a las funciones de un componente X a otro componente Y? En otras palabras quiero llamar las funciones del componente Y estando en el componente X.

Agradezco una colaboracion o ayuda en el tema.

Saludos

Por Daniel_Bermudez

3 de clabLevel



 

chrome
Citar            
MensajeEscrito el 10 Sep 2010 08:30 pm
Si hardcodeas una ruta de un componente a otro rompes la encapsulación, crea una función en el MXML que lo contie4ne a ambos para comunicarlos (usando su id, claro) Asegúrate que las funciones que quieres invocar sea públicas

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 13 Sep 2010 02:18 am
Si me puedes facilitar un ejemplo te lo agradezco, por que no te entendi muy bien la respuesta.

Por Daniel_Bermudez

3 de clabLevel



 

chrome
Citar            
MensajeEscrito el 13 Sep 2010 02:34 pm
Suponiendo que tienes componentes con ID componenteA y componenteB, en el MXML que lo contiene a ambos pones:

Código ActionScript :

function hacerAlgo():void{
  componenteB.hacealgo()
}


Entonces desde componenteA pones por ejemplo:

Application.application.hacerAlgo();

Mejor aún si generas un evento que la aplicación escuche ... pero con esto sería suficiente

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 28 Sep 2010 08:48 am
Muy buenas:

Justamente andaba buscando una solución para esto mismo, pero tengo un problemilla.

La solución propuesta por Jorge me parece de lo más acertada, pero en mi caso, no puedo acceder a las funciones de ningún componente mxml de mi aplicacion desde el MXML principal, pero si al revés.

Desde cualquiera de los componentes mxml "secundarios", al escribir "Application.application." me salen como opciones cualquier función o variable declaradas como públicas del MXML principal.

En la aplicacion principal mxml, al escribir lo mismo "Application.application.", no me salen como opción, ninguna variable ni funciones de los componentes mxml.

¿Esto es así? ¿Se me olvida algo?

Decir que en todos los mxml tengo importada la clase "Application" (import mx.core.application)

Por mingole

10 de clabLevel



 

chrome
Citar            
MensajeEscrito el 28 Sep 2010 02:21 pm
Application.application es la aplicación principial, si estás en ella no necesitas esa ruta, puedes llamar a métodos públicos de cualquier componente usando su id

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 25 Jul 2012 04:22 pm

solisarg escribió:

Application.application es la aplicación principial, si estás en ella no necesitas esa ruta, puedes llamar a métodos públicos de cualquier componente usando su id

Jorge


cual seria la sintaxis para llamar la funcion publica del componente desde la aplication?

Por Davizero

6 de clabLevel



 

chrome
Citar            
MensajeEscrito el 25 Jul 2012 04:50 pm
Sería

idComponente.metodo

Si el id del componente no esta en scope, tienes que meter la ruta hasta llegar. Por ejemplo tu componente tiene un ID miComponente y un metodo publico setDatos, haces

miComponente.setDatos(xxxx)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 27 Jul 2012 06:14 pm
lo que he echo es esto,
declare una variable

var myTimer:MyTimer = new MyTimer();

myTimer.startTimer();

me dio este error,
Cannot access a property or method of a null object reference.

y esta es la funcion que intento llamar.
public function startTimer():void {
baseTimer = getTimer();
t.start();
}

Por Davizero

6 de clabLevel



 

chrome
Citar            
MensajeEscrito el 27 Jul 2012 06:25 pm
¿Que es un myTimer? ¿Una clase que wrapea un Timer de Flash? ¿Que es t dentro de la función que llamas? ¿getImer está disponible como función global en AS3?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 27 Jul 2012 08:36 pm
myTimer es una varible que cree, para hacer herencia hacia el componente y poder entrar a las funciones del componente.

ocupoimport flash.utils.Timer, import flash.events.TimerEvent para iniciar un cronometro, el cual necesito iniciar desde mi applicacion.

te dejo el script de codigo
<mx:Script>
<![CDATA[
import flash.utils.Timer;
import flash.events.TimerEvent;
import mx.controls.Alert;
import mx.core.Application;

public const TIMER_INTERVAL:int = 10;

public var baseTimer:int;

public var t:flash.utils.Timer;

public var timerLOG:int = 10000
public var mtime:int;

public function init():void {
t = new flash.utils.Timer(TIMER_INTERVAL);
t.addEventListener(TimerEvent.TIMER, updateTimer);
}

public function updateTimer(evt:TimerEvent):void {
var d:Date = new Date(getTimer() - baseTimer);
counter.text = dateFormatter.format(d);
if (mtime >= timerLOG )
{
counter.setStyle("color", "Red");
}
}

public function startTimer():void {
baseTimer = getTimer();
t.start();
}


public function stoptTimer():void {
t.stop();
}

]]>
</mx:Script>

la funcion startTimeres la que necesito llamar desde la aplicacion.
get timer, nunca lo he ocupado no se como tendria que hacerlo, si me podes ilustar te lo agradeceria.

Por Davizero

6 de clabLevel



 

chrome
Citar            
MensajeEscrito el 27 Jul 2012 09:03 pm
Por lo que entiendo, necesitas llamar startTimer. Lo primero es saber donde está. Si es dentro de un componente, tendrás que ir por el id (creo que ya lo dije), si estás en la aplicación principal puedes usar FlexGlobals.topLevelApplication.startTimer() para accederla.

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 27 Jul 2012 09:36 pm
El startTimer esta dentro del componente, estoy trabajando en flex builder 3.

Y le he puesto un id a mi compenente pero no he podido realizar que se active la funcion startTimer () en el componente MyTimer.

Por Davizero

6 de clabLevel



 

chrome
Citar            
MensajeEscrito el 27 Jul 2012 10:00 pm
Ok, dices que tiene id, puede que esté dentro de un canvas, Vbox u otra cosa. Traza para ver si está al alcance

trace(myTimer.startTimer)

Debería salirte 'function, si da undefined, entonces la ruta es incorrecta (en mi ejempolo asumo que el id del componente es myTimer)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 30 Jul 2012 04:06 pm
Pues me ha tirado el mismo error, ya he probado varias formas y ninguna me resulta.

Por Davizero

6 de clabLevel



 

chrome

 

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