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?