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

Lista importada mediante XML

Estas en el tema de Lista importada mediante XML en el foro de Flash y Actionscript en Foros del Web. Hola, estoy desarrollando una lista de nombres importados dinámicamente con XML. Como estoy iniciandome en la programación lo estoy haciendo siguiendo este tutorial de desarrollo ...
  #1 (permalink)  
Antiguo 17/05/2007, 16:24
Avatar de Jowy  
Fecha de Ingreso: febrero-2007
Ubicación: En la red
Mensajes: 232
Antigüedad: 17 años, 9 meses
Puntos: 0
Lista importada mediante XML

Hola, estoy desarrollando una lista de nombres importados dinámicamente con XML. Como estoy iniciandome en la programación lo estoy haciendo siguiendo este tutorial de desarrollo web:
http://www.desarrolloweb.com/articul...l-a-flash.html
y ayudándome de un scroll que me bajé de inet.

Pues bien, la lista es muy simple, son nombres de clientes ordenados alfabeticamente. La lista acabada debería de ser así:

A
Angel Apellido Apellido
Antonio Apellido Apellido

C
Carlos Apellido Apellido
Cristian Apellido Apellido

M
Manuel Apellido Apellido
Maria Apellido Apellido

Z
Zoe Apellido Apellido

Y pretendo que se actualice en la película modificando solo el archivo XML que contiene los datos.

Esto es lo que contiene el XML.

lista.xml
Código:
<?xml version="1.0" encoding="iso-8859-1"?>
<lista>
	<seccion letra="A">
		<cliente nombre="Angel Apellido Apellido">
		</cliente>
		<cliente nombre="Antonio Apellido Apellido">
		</cliente>			
	</seccion>
	<seccion letra="C">
		<cliente nombre="Carlos Apellido Apellido">
		</cliente>
		<cliente nombre="Cristian Apellido Apellido">
		</cliente>			
	</seccion>
	<seccion letra="M">
		<cliente nombre="Maria Apellido Apellido">
		</cliente>
		<cliente nombre="Manuel Apellido Apellido">
		</cliente>			
	</seccion>	
	<seccion letra="Z">
		<cliente nombre="Zoe Apellido Apellido">
		</cliente>			
	</seccion>
</lista>
La idea es que se carguen los valores letra (cada letra representa una seccion) y nombre en 2 MovieClips (mc_seccion y mc_cliente)

Este es el code del action script en flash que me servirá para construir "lista.swf":
Código:
listaXML = new XML();
listaXML.ignoreWhite = true; 
listaXML.load("xml/lista.xml");
listaXML.onLoad = organizarXML;
stop(); 
// Esta es la función encargada de armar los Arrays a partir de los datos 
function organizarXML() 
	seccion = new Array();
	for (yy=0; yy<listaXML.firstChild.childNodes.length; yy++) { 
		seccion.push(listaXML.firstChild.childNodes[yy].attributes.letra);
		_root[listaXML.firstChild.childNodes[yy].attributes.letra] = new Array();
	for (aa=0; aa<listaXML.firstChild.childNodes[yy].childNodes.length; aa++) { 
		_root[listaXML.firstChild.childNodes[yy].attributes.letra].push( 
		listaXML.firstChild.childNodes[yy].childNodes[aa].attributes.cliente); 
		}
}
mostrarDatos();
} 
//Funcion para mostrar los datos
function mostrarDatos() { 
//Contruyo la lista
intContaClientes = 0;
intPosicion = 0;
intSeparar = 50; 
for (aa=0; aa<seccion.length; aa++) {
	_root.contenedor.attachMovie("mc_seccion", "mc_seccion"+aa, aa);
	_root.contenedor["mc_seccion"+aa]._y = (intPosicion * intSeparar);
	_root.contenedor["mc_seccion"+aa]._x = 25;
	_root.contenedor["mc_seccion"+aa].tx_seccion = seccion[aa];
	intPosicion++; 
	} 
for (bb=0; bb<_root[seccion[aa]].length; bb++) {
	_root.contenedor.attachMovie("mc_cliente", "mc_cliente"+intContaClientes, 100+intContaClientes);
	_root.contenedor["mc_cliente"+intContaClientes]._y = (intPosicion * intSeparar);
	_root.contenedor["mc_cliente"+intContaClientes]._x = 45;
	_root.contenedor["mc_cliente"+intContaClientes].tx_cliente = _root[seccion[aa]][bb];
	intPosicion++; 
	} 
intContaClientes++;
}

contenedor.setMask(mask_mc);
	_root.h_not = contenedor._height;
	_root.h_mask = mask_mc._height;
	_root.tramo = _root.h_not-_root.h_mask;
Como veis al final los clips se crean dinamicamente dentro de un MovieClip (contenedor) que los muestra en su interior. Hay una mascara que sirve para hacer el scroll del clip contenedor.

Pues bien, hago todo esto, todos los pasos del tutorial, y al exportar la lista me aparece en todos los valores "UNDEFINED". No se que estoy haciendo mal, creo que es porque la lista va colocada en una carpeta (/secciones/lista.swf) y luego la cargo dentro de una película principal (index.swf).

Puede ser que por esto las construcciones _root.contenedor...., _root[listaXML......, etc no sean válidas? O puede ser porque el linkage de los movieclips no lo haga correctamente? Yo lo hago los mc_cliente y mc_seccion con "export for runtime sharing" apuntando a "secciones/lista.swf"

:(

Alguien sabe donde esta el fallo?
  #2 (permalink)  
Antiguo 19/05/2008, 05:14
 
Fecha de Ingreso: junio-2005
Mensajes: 33
Antigüedad: 19 años, 5 meses
Puntos: 0
Respuesta: Lista importada mediante XML

Prueba a cambiar estas lineas, pon .text después de los nombres de cada texto dinámico, así:

_root.contenedor["mc_seccion"+aa].tx_seccion.text = seccion[aa];

_root.contenedor["mc_cliente"+intContaClientes].tx_cliente.text = _root[seccion[aa]][bb];


Yo estoy usando lo mismo que tu, y después de volverme loca un montón de veces lo he consequido así, el problema es que ahora no me funciona la máscara ni los botones del scroll y me da el siguiente error:

Error: No se pudo efectuar la acción 'with' porque el objeto especificado no existe.


Alguien sabe por qué es? Os pongo el código:

Código:
_root.createEmptyMovieClip("mc_msk", 301);
mc_msk._x = 180;
mc_msk._y = 320;

with (mc_msk) {
beginFill(0xff0000,50);
lineStyle(1,0x00ff00,100);
lineTo(200,0);
lineTo(200,200);
lineTo(0,200);
lineTo(0,0);
endFill();
}

_root.contenedor.setMask(mc_msk);
}
Botontes:

Código:
on (release) {
if (_root.contenedor._y < _root.mc_msk._y) {
_root.contenedor._y += _root.intSeparar;
}
}
Código:
on (release) {
if (_root.contenedor._y > _root.mc_msk._height - _root.contenedor._height) {
_root.contenedor._y -= _root.intSeparar;
}
}
Gracias de antemano.
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 16:01.