Foros del Web » Creando para Internet » Flash y Actionscript »

Problemilla que no se muy bien como solventar

Estas en el tema de Problemilla que no se muy bien como solventar en el foro de Flash y Actionscript en Foros del Web. Hola. Soy nuevo con el lenguaje AS3 y ando leyendo foros, libros y experimentando múltiples y variadas trastadas. A ver si soy capaz de explicame ...
  #1 (permalink)  
Antiguo 31/05/2012, 20:05
Avatar de ZiZeRoN  
Fecha de Ingreso: mayo-2012
Mensajes: 4
Antigüedad: 12 años, 6 meses
Puntos: 0
Problemilla que no se muy bien como solventar

Hola. Soy nuevo con el lenguaje AS3 y ando leyendo foros, libros y experimentando múltiples y variadas trastadas.

A ver si soy capaz de explicame y algún alma caritativa puede ayudarme.
El caso es que estoy haciendo un programa que tiene 3 clases(entre muchas otras): USUARIO, CONTROLADOR_USUARIO y CONTROLADOR_VISTA.

La idea es que la clase USURAIO sea un contenedor de datos, donde entre otras cosas figuran los atributos: Nombre, Apellido1 y Apellido2.

Por otro lado, la clase CONTROLADOR_VISTA hace una llamada a un método de la clase CONTROLADOR_USUARIO, que debe cargar los datos de un fichero de texto en un objeto de la clase USUARIO.

La clase CONTROLADOR_USUARIO utiliza el método que antes mencioné con una llamada a un evento dentro que asigna cada valor del fichero de texto al argumento correspondiente del objeto de la clase USUARIO.

Ahora es donde viene el problema. La llamada al evento se ejecuta después de que el código de la clase CONTROLADOR_VISTA continúe, por lo que los datos que veo al hacer un trace("nombre " + "apellido1 "+ "apellido2") son los que había en el objeto de la clase USUARIO antes de la supuesta carga de fichero.
Vamos, en otras palabras, que se ejecuta antes el código posterior que la llamada al evento donde se cargan los datos del fichero.

No soy capaz de resolver el entuerto, asi que agradezco cualquier ayuda.
Os dejo el código para ayudar a entenderlo mejor.

Case Usuario:
Código actionscript:
Ver original
  1. public class Usuario
  2.     // Esta clase es un contenedor de datos de usuario.
  3.     {
  4.         // Atributos privados de usuario. No queremos que nadie acceda a ellos directamente.
  5.         private var nombre:String;
  6.         private var apellido1:String;
  7.         private var apellido2:String;
  8.        
  9.         // Método de creación de la clase Usuario.
  10.         public function Usuario()
  11.         {
  12.             this.nombre = null;
  13.             this.apellido1 = null;
  14.             this.apellido2 = null;
  15.         }
  16.  
  17.         public function set_nombre(n:String){
  18.         // modifica el nombre del usuario
  19.             this.nombre=n;
  20.         }
  21.        
  22.         public function set_apellido_1(a1:String){
  23.         // modifica el apellido 1 del usuario
  24.             this.apellido1=a1;
  25.         }
  26.        
  27.         public function set_apellido_2(a2:String){
  28.         // modifica el apellido 2 del usuario
  29.             this.apellido2=a2;
  30.         }
  31.  
  32.         public function get_nombre():String{
  33.         // modifica el nombre del usuario
  34.             return this.nombre;
  35.         }
  36.        
  37.         public function get_apellido_1():String{
  38.         // modifica el apellido 1 del usuario
  39.             return this.apellido1;
  40.         }
  41.        
  42.         public function get_apellido_2():String{
  43.         // modifica el apellido 2 del usuario
  44.             return this.apellido2;
  45.         }
  46. }

Extracto de la Clase CONTROLADOR_USUARIO:
Código actionscript:
Ver original
  1. ..............
  2. private var user:USUARIO = new USUARIO();
  3. ..............
  4.  
  5. public function cagarDatosFicheroUsuario(nombreFich:String)
  6.         // Método que carga en un fichero de texto todos los nombres de ficheros de usuario que existen.
  7.         {
  8.             // Abrimos y leemos el fichero nombreFich para cargarlo en el usuario user.
  9.             var envio:URLRequest = new URLRequest("ficheros/usuarios/" + nombreFich);
  10.             var recibo:URLLoader = new URLLoader();
  11.             recibo.addEventListener(Event.COMPLETE, cargaDesdeFichero);
  12.             recibo.load(envio);
  13.             function cargaDesdeFichero(event:Event):void
  14.             // Procedimiento que recoge la información desde el fichero de texto.
  15.             {
  16.                 var variables:URLVariables = new  URLVariables(event.target.data);
  17.                 variables.dataFormat = URLLoaderDataFormat.VARIABLES;
  18.                 user.set_nombre(variables.nombre);
  19.                 user.set_apellido_1(variables.apellido1);
  20.                 user.set_apellido_2(variables.apellido2);
  21.                 user.set_rol(variables.rol);
  22.                 user.set_curso(variables.curso);
  23.                 user.set_suma(variables.suma);
  24.                 user.set_contador(variables.contador);
  25.                 user.set_f_alta(variables.fecha_alta);
  26.                 user.set_f_baja(variables.fecha_baja);
  27.             }
  28.         }
  29.        
  30.         public function concatenacion ():String
  31.         // Devuuelve una cadena de texto concatenando nombre, apellido1, apellido2 y ".txt" del objeto user.
  32.         {
  33.            
  34.             var cadena:String = user.get_nombre() + user.get_apellido_1() + user.get_apellido_2() + ".txt";
  35.             return cadena;
  36.         }

Extracto de la Clase CONTROLADOR_VISTA:
Código actionscript:
Ver original
  1. .........
  2. private var cu:ControladorUsuario = new ControladorUsuario();
  3. .........
  4. private function IdentificacionUsuario(event:MouseEvent):void
  5.         // Método que elimina la pantalla de login y abre la de menú principal para un usuario identificado.
  6.         // Si el usuario no es correcto se genera un mensaje de error.
  7.         {
  8.             // Recogemos los datos introducidos por el usuario en la pantalla de login.
  9.             var nombreInput:String = l.getDatosIntroducidos();
  10.             // Pasamos a minúsculas los datos introducidos por el usuario.
  11.             nombreInput = nombreInput.toLowerCase();
  12.             // Cargamos los datos del usuario desde el fichero dado.
  13.             cu.cagarDatosFicheroUsuario(nombreInput);
  14.            
  15.             // AQUÍ HAY UN PROBLEMA QUE SE DEBE RESOLVER. LA FUNCIÓN "CARGARDATOSFICHEROUSUARIO" LLAMA A OTRA FUNCIÓN POR EVENTO QUE METE LOS DATOS
  16.             // EN EL OBJETO USUARIO. SIN EMBARGO, ESTA FUNCIÓN DE EVENTO SE EJECUTA DESPUÉS DEL MÉTODO "CONCATENAVALORESUSUARIO" QUE VIENE AQUÍ DEBAJO, POR LO QUE
  17.             // CONCATENA LOS VALORES VIEJOS DEL OBJETO USUARIO  CON "CONCATENAVALORESUSUARIO" Y NO LOS NUEVOS, PUES ESTOS SE LE ASIGNAN JUSTO DESPUÉS.
  18.            
  19.             // Obtenemos una cadena con los datos del usuario del fichero de texto cargado.
  20.             var nombrefich:String = cu.concatenaValoresUsuario();
  21.             trace(nombrefich);
  22.            
  23.             if (nombreInput == nombrefich)
  24.             {
  25.                 this.removeChild(l);
  26.                 mppal = createMenuPpal();
  27.                 if (cu.getRolUsuario() == "p")
  28.                 {
  29.                     // Un profesor puede ver la opción de administración.
  30.                     mppal.setVisibilidad(true);
  31.                 }
  32.                 else
  33.                 {
  34.                     // Un usuario que no sea profesor no debe ber la opción de administración.
  35.                     mppal.setVisibilidad(false);
  36.                 }
  37.                 this.addChild(mppal);
  38.             }
  39.             else
  40.             {
  41.                 this.errorbox.setMensaje("Los datos introducidos son erróneos");
  42.             }      
  43.            
  44.         }

Última edición por ZiZeRoN; 01/06/2012 a las 06:49

Etiquetas: as3
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:01.