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

Mostrar array globales

Estas en el tema de Mostrar array globales en el foro de Flash y Actionscript en Foros del Web. Cordial Saludo Tengo un pequeño problemilla... en un archivo actionScript estoy recibiendo un xml que me es enviado desde un asp, este xml lo recibo ...
  #1 (permalink)  
Antiguo 23/01/2006, 10:27
Avatar de barba negra  
Fecha de Ingreso: mayo-2003
Ubicación: bogota
Mensajes: 91
Antigüedad: 21 años, 6 meses
Puntos: 0
Mostrar array globales

Cordial Saludo

Tengo un pequeño problemilla...
en un archivo actionScript estoy recibiendo un xml que me es enviado desde un asp, este xml lo recibo y lo guardo en un array global.

Este action Script lo incluyo en un fla. pero al tratar de leer el arreglo global la informacion no la encuentro...
que prodra ser?
Este es el codigo de as ejmplo.as
Código:
topica=new Object();
topico = new Array();
_global.mi_array = new Array();
cnetXML = new XML();
cnetXML.load("http://servidor/cargaxml.asp");
cnetXML.ignoreWhite = true;
cnetXML.onLoad=extractData;

function extractData(success){
	cantidad = this.firstChild.childNodes.length;	
	rootHandler=this.firstChild.childNodes; // First level - <channel>
	if (cantidad != undefined) {
	   for (var i = 0; i<cantidad; i++) {
				topica[i]=new MovieClip();
				topica[i].idRegional=rootHandler[i].attributes.id;
				topica[i].nombreRegional=rootHandler[i].attributes.name;
				topica[i].direccionRegional=rootHandler[i].attributes.direccion;
				topica[i].ciudad=rootHandler[i].attributes.descripcion;
				topica[i].descripcion=rootHandler[i].attributes.descripcion;
				
				_global.mi_array[i] = new MovieClip();
			   	_global.mi_array[i].idRegional = new Array();
				_global.mi_array[i].nombreRegional = new Array();
				_global.mi_array[i].direccionRegional = new Array();
				_global.mi_array[i].ciudad = new Array();
				_global.mi_array[i].descripcion = new Array();
				
				_global.mi_array[i].idRegional = rootHandler[i].attributes.id;
				_global.mi_array[i].nombreRegional =rootHandler[i].attributes.name;
				_global.mi_array[i].direccionRegional = rootHandler[i].attributes.direccion;
				_global.mi_array[i].ciudad = rootHandler[i].attributes.ciudad;
				_global.mi_array[i].descripcion = rootHandler[i].attributes.descripcion;				
		   }
	}
cargarDatosMas = function (idMapa) {
	//topica[idMapa].descripccion();
	trace(_global.mi_array[idMapa].descripcion);
};
y este es el codigo del fla ejemplo.fla
Código:
#include "ejemplo.as"
//cargarDatosMas(1);
trace(_global.mi_array[1].idRegional);

quien me pueda ayudar gracias
__________________
quien se duerme se lo lleva la corriente.......

  #2 (permalink)  
Antiguo 23/01/2006, 10:48
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 10 meses
Puntos: 5
Buenas. Me parece que lo que te conviene es primero trabajar sobre un solo .fla y recién cuando todo ande bien, separás el código a un .as y lo incluís en la película principal. Te digo porque me parece rara, por lo menos, la función que extrae los nodos del XML.

Crea un objeto, pero lo llena con un array ("topica"), al que después redeclara como MovieClip... después hace lo mismo con "mi_array", que declara inicialmente como array, pero después lo redeclara -en cada vuelta del loop- como un MovieClip. A la vez, con cada attributo del xml generás un array para guardar un valor simple...

Me parece que el problema no está en el include (o al menos, no exclusivamente)

Suerte
  #3 (permalink)  
Antiguo 23/01/2006, 10:55
Avatar de jahepi
Colaborador
 
Fecha de Ingreso: diciembre-2004
Ubicación: Querétaro
Mensajes: 1.124
Antigüedad: 19 años, 11 meses
Puntos: 43
Hola Barba Negra!

Una cosa qu eno creo que sea el error pero que debes de tomar en cuenta es qu e solamente cuando declaras debes especificar la palabra _global, ya para su posterior uso no es necesario usuarla para referirte a ella.

Donde veo que esta el error es en esta parte de tu código:

Código PHP:
_global.mi_array[i] = new MovieClip();
_global.mi_array[i].idRegional = new Array();
_global.mi_array[i].nombreRegional = new Array();
_global.mi_array[i].direccionRegional = new Array();
_global.mi_array[i].ciudad = new Array();
_global.mi_array[i].descripcion = new Array();
                
_global.mi_array[i].idRegional rootHandler[i].attributes.id;
_global.mi_array[i].nombreRegional =rootHandler[i].attributes.name;
_global.mi_array[i].direccionRegional rootHandler[i].attributes.direccion;
_global.mi_array[i].ciudad rootHandler[i].attributes.ciudad;
_global.mi_array[i].descripcion rootHandler[i].attributes.descripcion
Declaraste algunas propiedades como arreglos como idRegional, nombreRegional, etc... y mas adelante en tu código a esos arreglos les asignas directamente una cadena, lo cual debería ser así:

Código PHP:
mi_array[i] = new MovieClip();
mi_array[i].idRegional = new Array();
mi_array[i].nombreRegional = new Array();
mi_array[i].direccionRegional = new Array();
mi_array[i].ciudad = new Array();
mi_array[i].descripcion = new Array();
                
mi_array[i].idRegional[i] = rootHandler[i].attributes.id;
mi_array[i].nombreRegional[i] =rootHandler[i].attributes.name;
mi_array[i].direccionRegional[i] = rootHandler[i].attributes.direccion;
mi_array[i].ciudad[i] = rootHandler[i].attributes.ciudad;
mi_array[i].descripcion[i] = rootHandler[i].attributes.descripcion

Un Saludo!
  #4 (permalink)  
Antiguo 23/01/2006, 10:59
Avatar de barba negra  
Fecha de Ingreso: mayo-2003
Ubicación: bogota
Mensajes: 91
Antigüedad: 21 años, 6 meses
Puntos: 0
enviar array globales....

no le pongas atencion donde se asina al objeto topica... esa era una prueba que estaba haciendo.... la parte importante es la del array global....

Lo que necesito saber es como leo en el fla la informacion del array global que cargue en el AS..
__________________
quien se duerme se lo lleva la corriente.......

  #5 (permalink)  
Antiguo 23/01/2006, 12:01
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 10 meses
Puntos: 5
Creo que no es necesario hacer un array "_global". Si declarás el array fuera de la función y no lo redeclarás dentro, vas a estar referenciando el que está afuera de la función. Otra opción (la más prolija) es que la función devuelva el array y lo recojas en una variable. Aún así, podés usar cualquiera de las tres opciones en la mayoría de los casos.

Un ejemplo, con las tres opciones:

(.fla)

Código:
#include "array_global.as" // No poner ; acá
test();
testGlobal();
recogeReturn = testReturn();
trace ("arr_test= "+arr_test);
trace("arr_global= "+_global.arr_global);
trace("recogeReturn= "+recogeReturn);
(array_global.as)

Código:
var arr_test:Array = new Array();
var arr_return:Array = new Array();
_global.arr_global = new Array();
function test() {
	for (var i:Number=0;i<2;i++) {
		arr_test[i] = i.toString();
	}
}
function testGlobal () {
	for (var i:Number=0;i<2;i++) {
		arr_global[i] = i.toString();
	}
}
function testReturn () {
	for (var i:Number=0;i<2;i++) {
		arr_return[i] = i.toString();
	}
	return arr_return;
}
Suerte
  #6 (permalink)  
Antiguo 23/01/2006, 15:32
Avatar de barba negra  
Fecha de Ingreso: mayo-2003
Ubicación: bogota
Mensajes: 91
Antigüedad: 21 años, 6 meses
Puntos: 0
Coloque el siguiente codigo ejemplo.as
Código PHP:
var arr_test:Array = new Array();
var 
mi_array1:Array = new Array();
_global.mi_array = new Array();

function 
CargaXml(){
    
cnetXML = new XML();
    
cnetXML.load("http://servidor:81/cargaxmlSedes.asp");
    
cnetXML.ignoreWhite true;
    
cnetXML.onLoad=extractData;


function 
extractData(success){
    
cantidad this.firstChild.childNodes.length;    
    
rootHandler=this.firstChild.childNodes// First level - <channel>
    
if (cantidad != undefined) {
       for (var 
0i<cantidadi++) {                                
                
/*mi_array[i] = new MovieClip();
                   mi_array[i].idRegional = new Array();
                mi_array[i].nombreRegional = new Array();
                mi_array[i].direccionRegional = new Array();
                mi_array[i].ciudad = new Array();
                mi_array[i].descripcion = new Array();*/
                
                
mi_array[i] = new MovieClip();
                   
mi_array[i].idRegional rootHandler[i].attributes.id.toString();
                
mi_array[i].nombreRegional rootHandler[i].attributes.name.toString();
                
mi_array[i].direccionRegional rootHandler[i].attributes.direccion.toString(); 
                
mi_array[i].ciudad rootHandler[i].attributes.ciudad.toString(); 
                
mi_array[i].descripcion=rootHandler[i].attributes.descripcion.toString();
                                
                
/*mi_array[i].idRegional[i] = rootHandler[i].attributes.id.toString(); 
                mi_array[i].nombreRegional[i] =rootHandler[i].attributes.name.toString(); 
                mi_array[i].direccionRegional[i] = rootHandler[i].attributes.direccion.toString(); 
                mi_array[i].ciudad[i] = rootHandler[i].attributes.ciudad.toString(); 
                mi_array[i].descripcion[i] = rootHandler[i].attributes.descripcion.toString();        */                
                //trace(mi_array[i].nombreRegional[i])
           
}
     }
     
//_root.CargaDatos();
}

function 
CargaDatos(){
    return 
mi_array;

y el codigo fla es

Código PHP:
#include "ejemplo.as"
CargaXml();
DatosCargados=CargaDatos();
trace("recogeReturn= "+DatosCargados); 
pero no me imprime nada

Nota
La Lectura del XML esta bien y la insersion en el array tambien esta bien.
La Informacion Se esta Perdiendo cuando se llama la funcion CargaDatos()
__________________
quien se duerme se lo lleva la corriente.......

  #7 (permalink)  
Antiguo 23/01/2006, 16:53
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 10 meses
Puntos: 5
Acabo de probar el mismo código (.fla) y el .as con muy leves modificaciones (no tengo el xml) y me hace el trace:

Código:
var arr_test:Array = new Array();
var mi_array1:Array = new Array();
_global.mi_array = new Array();

function CargaXml(){
    /*
	cnetXML = new XML();
    cnetXML.load("http://servidor:81/cargaxmlSedes.asp");
    cnetXML.ignoreWhite = true;
    cnetXML.onLoad=extractData;
	*/
	extractData();  // llamada a la función que dispararía el onLoad
} 

function extractData(success){ // array estático
	mi_array[0] = "test";
	mi_array[1] = "test2";
}
function CargaDatos(){ // lo devuelve
    return mi_array;
}
Si agrego la parte en que creás un mc (no entiendo bien por qué)

Código:
mi_array[0] = new MovieClip();
mi_array[0].propiedad1 = "test";
mi_array[0].propiedad2 = "test2";
Sigue devolviendo algo en el trace, pero esta vez "[object Object]", en lugar de valores.

PD: el método toString() no es necesario si estás sacando valores de un xml, que de por sí devuelve "strings"/cadenas.

No sé si ese mc tendrá algo que ver, pero es raro que no te devuelva nada.
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 15:56.