En principio dispatchEvent funciona bien, pero en una clase en concreto dispatchEvent funciona sin problemas en una parte de la clase, pero en otra parte no y no entiendo porqué.
Llevo todo el día probando cosas y no hay forma, no funciona y no entiendo el motivo.
Tengo las siguientes clases:
MAIN: clase principal, en su constructor creo las instancias de las otras clases y los addEventListener correspondientes para los eventos. Además en el MAIN tengo las funciones que se ejecutan al llegar las señales de los eventos.
NAVIGATIONEVENT: Clase muy sencilla que recibe la señal y la reenvía a la clase padre (en este caso el MAIN).
BARRADEESTADO: Clase muy sencilla, tiene un MC asociado con un campo de texto. Típica barra de estado de un programa.
VENTANALIBRO: Es la clase "problemática". Al ser instanciada desde el main, hace varias cosas y debería mandar una señal a BarraDeEstado con un texto que NO sale.
Además, tiene 2 funciones que se activan al pulsar un botón, estas funciones mandan cada una un dispatchEvent a BarraDeEstado y funcionan las dos perfectamente.
Tiene un MC asociado con campos de texto.
Aquí parte del MAIN (clase principal)
Código :
public class Main extends MovieClip
{
public var miDatabaseManager:DatabaseManager;
private var miBarraDeEstado:BarraDeEstado;
public var miVentanaLibro:VentanaLibro;
public var miListadoDeBuques:ListadoBuques;
public function Main()
{
//crea una instancia de la barra de estado
miBarraDeEstado = new BarraDeEstado();
miBarraDeEstado.x = 0;
miBarraDeEstado.y = 900;
addChild( miBarraDeEstado );
//crea una instancia de VentanaLibro
miVentanaLibro = new VentanaLibro();
miVentanaLibro.x = 0;
miVentanaLibro.y = 0;
miVentanaLibro.addEventListener( NavigationEvent.MENSAJE, escribe_un_mensaje );
addChild( miVentanaLibro );
[..aqui sigue el constructor..]
} //fin del constructor
//evento para escribir mensajes en la Barra de Estado
public function escribe_un_mensaje( e:NavigationEvent ):void
{
trace("aquí");
miBarraDeEstado.actualizaBarraDeEstado(e.data);
}
[...aqui sigue el main con otras cosas...]
}
Clase BarradeEstado
Código :
package
{
import flash.display.MovieClip;
public class BarraDeEstado extends MovieClip
{
public var mensaje;
public function BarraDeEstado()
{
campoMensajes.text = "Barra de estado iniciada";
}
public function actualizaBarraDeEstado(sms:String)
{
campoMensajes.text = sms;
}
}
}
Clase NavigationEvent
Código :
package
{
import flash.events.Event;
public class NavigationEvent extends Event
{
public static const MENSAJE:String = "mensaje";
public var data:String;
public function NavigationEvent( type:String )
{
super( type );
}
}
}
Y aquí la clase "problemática", tengo 3 dispatchEvents aquí y sólo funcionan 2.
Clase VentanaLibro
Código :
package
{
[..aqui los imports..]
public class VentanaLibro extends MovieClip
{
//CONSTRUCTOR
public function VentanaLibro()
{
// Personalizacion de los campos de texto
[..código configurando unos campos de texto..]
//BOTON TEMPORAL
botonTemporal.addEventListener(MouseEvent.CLICK, salvar );
// Este es el dispatchEvent que aparentemente no va!!!!
var a:NavigationEvent = new NavigationEvent(NavigationEvent.MENSAJE);
a.data = "¡Programa OK!";
dispatchEvent( a );
} //fin del CONSTRUCTOR
//método en el que el dispatchEvent SI funciona
public function salvar(e:MouseEvent):void
{
if(comprueba_campos_minimos())
{
[..codigo diverso..]
//manda un MENSAJE con un texto a la instancia de BarraDeEstado
var c:NavigationEvent = new NavigationEvent(NavigationEvent.MENSAJE);
c.data = " datos OK";
dispatchEvent( c );
}
}
//Funcion que comprueba que existen los campos necesarios para salvar en BBDD
//en esta funcion el que el dispatchEvent TAMBIEN funciona
function comprueba_campos_minimos():Boolean
{
if(...condiciones...)
return true;
else
{
var err:NavigationEvent = new NavigationEvent(NavigationEvent.MENSAJE);
err.data = "¡Error!";
dispatchEvent( err );
return false;
}
}
}
}
Explicación del code:
La barra de estado, al instanciarse, escribe en el campo de texto del MC asociado: "Barra de estado iniciada".
Hasta aquí bien.
Luego, al instanciar miVentanaLibro el texto de la barra de estao debería cambiar a "¡Programa OK!", al recibir el evento, pero no cambia.
En el constructor de VentanaLibro
¿Por qué no funciona ese dispatchEvent?
