Comunidad de diseño web y desarrollo en internet online

Arreglo pasado por parametro no se llena

Citar            
MensajeEscrito el 11 Ene 2011 11:13 pm
Hola a todos


Tengo un programita que carga unos datos desde php, y a traves de eventos determiné el momento en que estos estan cargados. Los arreglos, en la clase que se comunica con el php, se llenan sin problemas, pero la clase que recibe el evento y que entregó como parametros los arreglos, no se han llenado, como si fueran arreglos distintos a pesar que se pasan por parametro.

la clase llamadora es la siguiente

Código ActionScript :

public class MainShop extends MovieClip {
      
      private var inventoryName: Array = new Array();
      private var dispatcher:ClaseDispatcher;
      
      public function MainShop():void{
         
         dispatcher = ClaseDispatcher.cargaCompleta();
         dispatcher.addEventListener(ClaseDispatcher.DATOS_CARGADOS, completado);
         
         var con:BDConexion = new BDConexion(inventoryName);
         con.obtenerDatosBD();
      }
      
      private function completado(evt:Event):void {
         trace(inventoryName);
      }
   }


y la clase que carga los arreglos es el siguiente

Código ActionScript :

public class BDConexion extends MovieClip {
      
      private var inventoryName:Array = new Array;
      private var gateway:String = "http://localhost/amfphp1.9/gateway.php";
      private var conexion:NetConnection = new NetConnection;
      private var responder:Responder;
      private var dispatcher:ClaseDispatcher;
      
      public function BDConexion( inventoryName_:Array):void {
         inventoryName = inventoryName_;
      }
      
      private function cargaCompleta():void {
         trace(inventoryName)
         dispatcher = ClaseDispatcher.cargaCompleta();
         dispatcher.dispatchEvent(new Event(ClaseDispatcher.DATOS_CARGADOS));
      }
      
      public function obtenerDatosBD():void {
         conexion.connect(gateway);      

         responder = new Responder(setInventoryName, error);
         conexion.call("Calculadora.getInventoryName", responder, "datosUsuarios");
      }
      
      private function setInventoryName(resultado:Array):void {
         inventoryName = resultado;
      }
   }


en el trace que esta dentro de la clase "cargaCompleta·, el arreglo esta lleno, pero en el trace que esta en la clase llamadora "MainShop" dentro de la funcion "completado" , aparece vacio.

Alguna idea? plis

Ayslin

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 12 Ene 2011 02:11 pm
Hace una copia, no una referencia. Prueba así:

Código ActionScript :

private function completado(evt:Event):void { 
         inventoryName = con. getLista()
 }


En BDConnection agregas

Código ActionScript :

public function getLista():Array{
    return inventoryName;
}


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 12 Ene 2011 06:41 pm
Hola Jorge

Gracias por la respuesta :D, pero tienes alguna idea de por qué en este caso es una copia y no una referencia?, ya había trabajado otras veces con arreglos desde otras clases y siempre funcionaban como referencias. De hecho si cambio algo en el constructor, por ejemplo inventoryPlace.push("a"), esa "a" la puedo ver desde mainShop,pero no los datos que cargo, o sea que en algún punto tienes razón, se hace una copia, pero por qué :S

Ayslin

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 12 Ene 2011 06:43 pm
Los lenguajes interpretados (como AS) y sin manejo de memoria no suelen manejar explícitamente punteros, que es la clave para la referencia. La única referencia que maneja Flash es a nivel de clases, de ahi que se use tanto el Singleton para que siempre se haga referencia a un mismo contenedor de datos

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 12 Ene 2011 07:06 pm
Sí, creo que el singleton es la solución, muchas gracias :D

Ayslin

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 13 Ene 2011 07:29 am
Como idea (no sé si es eso)
Cuando declaras en la clase BDConexion

Código ActionScript :

private var inventoryName:Array = new Array; 

Lo declararía simplemente

Código ActionScript :

private var inventoryName:Array; //<--no lo inicializamos


Como segunda idea, no te preocupes de pasarle como argumento el array, declara pública la variable inventoryName, y accede a ella a través de

Código ActionScript :

con.inventoryName

Por Eliseo2

710 de clabLevel



 

firefox

 

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