Hola
gorkamu89 !
Ahorita no me voy a meter en la dudas del labelField, quiero ver la parte de como obtienes y generas los datos.
Te propongo esta solución que es más intuitiva, la idea es que a partir de los archivos XML generar colecciones de objetos del tipo Disco, teniendo estos datos te será más sencillo generar la parte gráfica.
Por ejemplo, tenemos la siguiente estructura en el XML:
Código XML:
Ver original<discos>
<disco>
<artista>Artista 1</artista>
<canciones>
<t>track1</t>
<t>track2</t>
</canciones>
</disco>
<disco>
<artista>Artista 2</artista>
<canciones>
<t>track1</t>
<t>track2</t>
</canciones>
</disco>
<disco>
<artista>Artista 3</artista>
<canciones>
<t>track1</t>
<t>track2</t>
</canciones>
</disco>
</discos>
Ahora si generamos nuestra clase Disco que encapsulará toda la información genérica:
Código actionscript:
Ver originalpackage {
public class Disco
{
private var artista:String
private var canciones:Array;
public function Disco(artista:String)
{
this.artista = artista;
canciones = new Array();
}
public function agregarCancion(cancion:String):void
{
canciones.push(cancion);
}
public function obtenerCancion(index:int):String
{
return canciones[index];
}
public function numeroCanciones():int
{
return canciones.length;
}
public function obtenerArtista():String
{
return artista;
}
}
}
La clase contiene como atributos el nombre del artista y la lista de canciones, puedes preguntarle a la clase por el número de canciones, por determinada canción, etc.
Ahora la idea es generar instancias de esta clase con la ayuda del XML:
Código actionscript:
Ver originalpackage {
import flash.events.Event;
import flash.net.URLRequest;
import flash.net.URLLoader;
public class Main
{
public static function main():void
{
var loader:URLLoader = new URLLoader();
loader.load(new URLRequest("discos.xml"));
loader.addEventListener(Event.COMPLETE, Main.materializar);
}
private static function materializar(evt:Event):void
{
var discosCol:Array = new Array();
var xml:XML = new XML(evt.target.data);
var discos:XMLList = xml.disco;
for each (var disco:XML in discos) {
var discoObj:Disco = new Disco(disco.artista);
var canciones:XMLList = disco.canciones;
for each (var cancion:XML in canciones.children()) {
discoObj.agregarCancion(cancion);
}
discosCol.push(discoObj);
}
}
}
}
La variable discosCol contiene todos los objetos Disco, estos los tendrás disponibles dentro de la aplicación, con esta información puedes generar tus lista de artistas así como mostrar las canciones de ese artista, solo falta meterle talacha a la parte de presentación (MXML).
Un saludote !