¿Quieres registrarte?

Cargar XML en un componente List en Actionscript 3

Por: penHolder
22 de Octubre del 2008
2905 de clabLevel
Otros artículos de penHolder
6,222 visitas

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:

Enviar a twitter Enviar a facebook


También te interesa


Etiquetas flash actionscript_3

Comentarios | Enviar un comentario
Buen codigo PH ;)
Pero.. ¿para que crear una instancia del componente List y luego otra de tu componente? Has que tu clase extienda de List y le añades los métodos que te interesen implementar..
la clase te quedaría asi:

Código :

package 
{
   import fl.controls.List;
   import fl.data.DataProvider;
   import flash.net.URLRequest;
   import flash.net.URLLoader;
   import flash.events.Event;
   //-------------------------------------------------
   public class FillList extends List
   {
      private var _xml:XML;
      //-------------------------------------------------
      public function FillList():void   {   }
      //-------------------------------------------------
      public function setData(url:String):void
      {
         var request:URLRequest = new URLRequest(url);
         var loader:URLLoader = new URLLoader();
         loader.load(request);
         loader.addEventListener(Event.COMPLETE, xmlLoaded);
      }
      private function xmlLoaded(e:Event):void
      {
         _xml = new XML(e.target.data);
         dataProvider = new DataProvider(_xml);
      }
      //-------------------------------------------------
   }
}


Y en la clase Main

Código :

package  
{ 
   import flash.display.MovieClip;
   import fl.controls.List; 
   import FillList; 
   //-------------------------------------------------------------------------------- 
   public class Main extends MovieClip 
   {
      private var bofhList:FillList;
      //---------------------------------------------------------------------------- 
      public function Main() 
      {
         bofhList = new FillList(); 
         bofhList.setData("datos.xml"); 
         bofhList.setSize(150,200); 
         bofhList.move(10,10); 
         addChild(bofhList);
      } 
      //---------------------------------------------------------------------------- 
   } 
}


:P
Por: Zguillez
Gracias por los créditos, pero yo apenas hice algo, el verdadero crédito es tuyo.
Buen tip (y)
Por: The Fricky!
Excelente tip, gracias a los ositos modestositos!
Por: Chevy
JaJa... Muy buen Tip, sin duda sera útil ademas de que viene un buen aporte de Zguillez !

Chevy-blog :

Excelente tip, gracias a los ositos modestositos!
¿Quienes?
Por: M@U
Falto:

Código :

<datos label="esutoraiki" />
:lol: :lol:
Por: esutoraiki
pero esto es en serio?????,,,

para llenar un puto listado tienes que escribir toda esa mamada?, cuando antes lo hacias con new XML y dataprovider en 4 lineas
Por: ????-blog

????-blog :

pero esto es en serio?????,,,

para llenar un puto listado tienes que escribir toda esa mamada?, cuando antes lo hacias con new XML y dataprovider en 4 lineas


eso cada vez que lo necesitabas, osea q si los necesitabas en 5 proyectos escribias 20 lineas, ahora se resume solo a 2 lineas en definitiva, por lo q en 5 proyectos la cantidad de lineas se reduce a 10, es una reutilidad del 50%...

Código :

bofhList = new FillList(); 
bofhList.setData("datos.xml"); 


recibe tu batzo amistozo con dignidad U_U
Por: penHolder
oigan, a mi me gustaria agregar eso a mi reproductor, pero que cuando se le clip a cualquiera de los campos de la lista, ella cambie de cancion, que programacion podria agregar
Por: Jose Alejandro-blog
Como se haria que este componente se moviera con la posicion del raton?
Por: Cesar-blog
Cesar-blog

Hola man!!!. Una manera rapida que se me ocurre es que le cambies la posición al componente por medio de actionscript. si no puedes mover directamente el componente metelo dentro de un movieclip y mueve el movieclip. Claro esta teniendo en cuenta que depronto es necesario que le pongas un nombre de instancia al movieclip y que redirecciones algunas cosas
Por: esutoraiki
Hola; seria muy muy util si colocaran los archivos de ejemplo para descargar.

Se les agradece saludos.
Por: ViejoIvan
Tengo un script que modifique a mi conveniencia pero el ultimo paso no puedo desarrollarlo. Le quiero aplicar un boton o sino link url ya probé de varias maneras modificar el Script que antes era Lector de noticias y ahora lo adapte a carga de datos de imagenes y detalles de texto, se agradece su ayuda...
Por: ClickPublicitario-blog
Deja un comentario
IMPORTANTE

Recuerda ser respetuoso, no insultes a otras personas, ni uses palabrotas, hay una persona al otro lado de la pantalla.

Habla bien, NO ESCRIBAS EN MAYUSCULA TODO, no escribas como en un SMS, evita cosas como "ke", "x q" y demás abreviaciones.

Aquí funcionan las etiquetas de los foros, puedes usar [b] para negrita, [img] para las imágenes, [url] para los enlaces, etc.

Si tienes preguntas técnicas, envíalas mejor al foro.