Comunidad de diseño web y desarrollo en internet

Cargar XML en un componente List en Actionscript 3

El uso de XML en Actionscript 3 se ha vuelto muy sencillo gracias a E4X. Un ejemplo simple es completar un componente List con un archivo XML básico.

Código :

<datos>
   <datos label="Freddie" />
   <datos label="Aoyama" />
   <datos label="DanielSemper" />
   <datos label="Dano" />
   <datos label="DJ Konflëis" />
   <datos label="Elcash" />
   <datos label="Fael" />
   <datos label="La100ra" />
   <datos label="Mariux" />
   <datos label="Maikel" />
   <datos label="NEO_JP" />
   <datos label="Pedro" />
   <datos label="Ramm" />
   <datos label="Zarzamora" />
   <datos label="Zguillez" />
   <datos label="_CONEJO" />
</datos>

En un principio lo hize en el fla creando un par de funciones...

Código :

import flash.net.URLRequest;
import flash.net.URLLoader;
import fl.controls.List;
import fl.data.DataProvider;
//
var _list:List;
var _xml:XML;
var _request:URLRequest;
var _loader:URLLoader;
var _dataProvider:DataProvider;
//
function buildList():void {
   //
   _list = new List();
   _list.setSize(150, 200);
   _list.move(10, 10);
   addChild(_list);
}
//
function loadData(_xmlData:String):void {
   //
   _request = new URLRequest(_xmlData);
   _loader= new URLLoader();
   _loader.load(_request);
}
//
function xmlLoaded(event):void {
   //
   _xml = new XML(_loader.data);
   _dataProvider = new DataProvider(_xml);
   _list.dataProvider = _dataProvider;
}
//
function addListeners():void {
   //
   _loader.addEventListener(Event.COMPLETE, xmlLoaded);
}
//
buildList();
loadData("datos.xml");
addListeners();
//

Al ver esto me di cuanta que seria mas optimo crear un pequeña clase que cargue el XML, pasandole al constructor la instancia del List y el archivo XML.

Código :

package com.penholder.component{
   //
   import fl.controls.List;   
   import fl.data.DataProvider;
   import flash.net.URLRequest;
   import flash.net.URLLoader;
   import flash.events.Event;
   //
   public class FillList {
      //
      private var _list:List;
      private var _xml:XML;
      private var _xmlData:String;
      private var _request:URLRequest;
      private var _loader:URLLoader;
      private var _dataProvider:DataProvider;
      //
      public function FillList(list:List, xmlData:String):void {
         //
         _list = list;
         _xmlData = xmlData;
         //
         loadData(_xmlData);
         addListeners();
      }
      //
      private function loadData(toLoad:String):void {
         //
         _request = new URLRequest(toLoad);
         _loader = new URLLoader();
         _loader.load(_request);
      }
      //
      private function xmlLoaded(event):void {
         //
         _xml = new XML(_loader.data);
         _dataProvider = new DataProvider(_xml);
         _list.dataProvider = _dataProvider;
      }
      //
      private function addListeners():void {
         //
         _loader.addEventListener(Event.COMPLETE, xmlLoaded);
      }
      //
   }
}

... y en el fla quedaria nada mas esto:

Código :

import fl.controls.List;
import com.penholder.component.FillList;
//
var bofhList:List = new List();
bofhList.setSize(150,200);
bofhList.move(10,10);
addChild(bofhList);
//
var filler:FillList = new FillList(bofhList, "datos.xml");

y el resultado seria...



Gracias TheFricky por la ayuda :wink:

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate