Comunidad de diseño web y desarrollo en internet online

Cargar XML desde una clase

Citar            
MensajeEscrito el 02 Feb 2007 09:33 pm
Bueno, siguiendo con la embarradera de manos con las clases en Actioscript , aquí otro reciente estancamiento en algo que creo es muy sencillo, mas no he encontrado la razón de esto.

Lo que quiero es cargar un XML desde dentro de una clase que estoy creando para un panel que contendrá varios items (fotito y descripción de un video) con scroll. Nada de esto está funcional, sólo el player de video (sin clases, por cierto aquí está el problema pasado sin resolver).

Esto es con lo que empecé:

Código :

class SelVideosPanel {
   private var items:Array;
   private var xmlContenedor:XML;
   
   public function SelVideosPanel(lsXMLItems:String) {
      trace(lsXMLItems+" en constructor");
      cargarItems(lsXMLItems);
   }
   private function cargarItems(lsXMLItems:String) {
      trace(lsXMLItems +" en cargarItems");
      xmlContenedor.load(lsXMLItems);
      xmlContenedor.onLoad = function(exito) {
         trace("Ya se cargó el XML");
         items = xmlContenedor.firstChild;
         trace(items);
      };
   }//end cargarItems
}



Y hago uso de esta clase de la siguiente manera:

Código :

import SelVideosPanel
var selvidPanel:SelVideosPanel=new SelVideosPanel("http://70.60.0.21:8080/servlet/XmlVideos");



Y estoy obteniendo al ejecutar sólo esto:

Código :

http://70.60.0.21:8080/servlet/XmlVideos en constructor
http://70.60.0.21:8080/servlet/XmlVideos en cargarItems


Help please! :crap:

Por Rafeo

650 de clabLevel

3 tutoriales
1 articulo

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 02 Feb 2007 09:56 pm
Hola,

utiliza Delegate:

Código :

import mx.utils.Delegate;
class SelVideosPanel {

   private var items:Array;
   private var xmlContenedor:XML;

   public function SelVideosPanel(lsXMLItems:String) {
      trace(lsXMLItems+" en constructor");
      cargarItems(lsXMLItems);
   }

   private function cargarItems(lsXMLItems:String) {
      trace(lsXMLItems +" en cargarItems");
      xmlContenedor.onLoad = Delegate.create(this, __xmlContenedorLoaded);
      xmlContenedor.load(lsXMLItems);      
   }//end cargarItems

  private function __xmlContenedorLoaded(): Void {
    trace("Ya se cargó el XML");
    items = xmlContenedor.firstChild;
    trace(items);
  }

}


a ver que tal resulta.

Saludos!

Por dmvalverde

150 de clabLevel



Genero:Masculino  

Extremadura

firefox
Citar            
MensajeEscrito el 02 Feb 2007 10:12 pm
en ningún sitio inicializas el xml: tuXml=new XML()

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 02 Feb 2007 10:43 pm
Solo cambié items = Array(xmlContenedor.firstChild); . No alcanza a accesar la función __xmlContenedorLoaded todavía. :S , no me dice . No me alcanza a decir "Ya se cargó el XML".

Por Rafeo

650 de clabLevel

3 tutoriales
1 articulo

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 02 Feb 2007 11:14 pm
Órale!!

Ouh! (grito estilo Homero Simpson), tienes toda la razón zah. Mil gracias.

Aunque a la hora de imprimir los items que es un arreglo, no me muestra nada.

Así le cambié.

Código :

import mx.utils.Delegate;
class SelVideosPanel {

   private var items:Array;
   private var xmlContenedor:XML;

   public function SelVideosPanel(lsXMLItems:String) {
      trace(lsXMLItems+" en constructor");
     xmlContenedor=new XML(); //lo que me dijo zah que faltaba
     items=new Array();
      cargarItems(lsXMLItems);
   }

   private function cargarItems(lsXMLItems:String) {
      trace(lsXMLItems +" en cargarItems");
      xmlContenedor.onLoad = Delegate.create(this, __xmlContenedorLoaded);
      xmlContenedor.load(lsXMLItems);      
   }//end cargarItems

  private function __xmlContenedorLoaded(): Void {
    trace("Ya se cargó el XML");
   trace(Array(xmlContenedor));  //si me funciona
//    items = Array(xmlContenedor.firstChild); // no me funciona
    trace(items); //este trace nunca lo veo 
  }
}

Por Rafeo

650 de clabLevel

3 tutoriales
1 articulo

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 02 Feb 2007 11:15 pm
Hicistes lo que dijo zah, lo de inicializar el xml? Por ejemplo:

Código :

private function cargarItems(lsXMLItems:String) {
   trace(lsXMLItems +" en cargarItems");
   xmlContenedor = new XML();
   xmlContenedor.ignoreWhite = true;
   xmlContenedor.onLoad = Delegate.create(this, __xmlContenedorLoaded);
   xmlContenedor.load(lsXMLItems);      
}//end cargarItems


:? No entiendo esto:

Código :

items = Array(xmlContenedor.firstChild);


yo diría que no va a funcionar :crap: , no se...

Por dmvalverde

150 de clabLevel



Genero:Masculino  

Extremadura

firefox
Citar            
MensajeEscrito el 02 Feb 2007 11:18 pm
Jajajajajajajajaja, en el último código se me pasó el

Código :

 xmlContenedor.ignoreWhite = true;
que me dijiste dmvalverde. Ya nunca se me olvidará :wink: .

Muchísmas gracias a los 2. ^^

Por Rafeo

650 de clabLevel

3 tutoriales
1 articulo

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 03 Feb 2007 08:37 pm
Ahora viene lo bueno con la clase.
El fin de esta clase, como lo mencioné en un principio , es para poder crear un scrollPanel para seleccionar entre varios videos.

Esta es la idea grafica en bloques:



Y no logro agregar los items todavia, sí me lee el XML del cual obtengo los childNodes con la información para cada uno de estos items.

Código :

import mx.utils.Delegate;
class SelVideosPanel extends MovieClip{

   private var xmlContenedor:XML;
   // Movie clip padre
   private var selectorVidPan:MovieClip;
   // ---------MovieClips hijos-----------------
   // Panel de items
   private var panelItems:MovieClip;
   // elemento del panel de items
   private var item:MovieClip;
   private var lsXMLItems:String;
   
   //--------------------------------------------------------
   //               getters  y setters
   //--------------------------------------------------------
   
   [Inspectable(defaultValue="http://70.60.0.21:8080/servlet/XmlVideos")]
   public function set setlsXMLItems(listaXML:String):Void {
    lsXMLItems = listaXML;
   }

   public function get getlsXMLItems():String {
    return lsXMLItems;
   }

   
//   private var item:MovieClip;
   public function SelVideosPanel(lsXMLItems:String) {
      trace(lsXMLItems+" en constructor");
     xmlContenedor=new XML();
     xmlContenedor.ignoreWhite = true;
      cargarXMLItems(lsXMLItems);
   }

   private function cargarXMLItems(lsXMLItems:String) {
      trace(lsXMLItems +" en cargarXMLItems");
      xmlContenedor.onLoad = Delegate.create(this, __xmlContenedorLoaded);
      xmlContenedor.load(lsXMLItems);      
   }//end cargarXMLItems

  private function __xmlContenedorLoaded(): Void {
    trace("Ya se cargó el XML");
//    items = (xmlContenedor.childNodes); 
       for (var i in xmlContenedor.firstChild.childNodes){
            trace ("xmlContenedor.childNodes ["+i+"]= "+xmlContenedor.firstChild.childNodes[i]);
         panelItems.attachMovie("item","item"+i,panelItems.getNextHighestDepth());
         panelItems["item"+i]._y=i+100;
      }
  }
}


Ya tengo linkeados los movie clips
item con item de la clase y
selectorVidPan con selectorVidPan

Y lo que obtengo ahora al ejecutar esto es:

Código :

undefined en constructor
undefined en cargarXMLItems
Ya se cargó el XML
Error opening URL "file:///C|/Flash/carpetadelProyecto/undefined"


Ayuda por favor (tips, corrección, regaños, quejas, sujerencias,etc. MENOS MENTIRAS)!! :crap:

Por Rafeo

650 de clabLevel

3 tutoriales
1 articulo

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 04 Feb 2007 12:57 pm
hola,

una pregunta: ¿cómo instancias los objetos de esa clase? Algo como:

Código :

var myvideopanel: SelVideosPanel = new SelVideosPanel(parámetros);

Por dmvalverde

150 de clabLevel



Genero:Masculino  

Extremadura

firefox
Citar            
MensajeEscrito el 06 Feb 2007 03:18 pm
Asi lo estaba haciendo pero no funciona, asi que ahora creo la instacia arrastrando desde la library un selectorVidPan... tampoco me esta funcionando. :(

Por Rafeo

650 de clabLevel

3 tutoriales
1 articulo

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 06 Feb 2007 10:01 pm
En esta función

Código :

   public function SelVideosPanel(lsXMLItems:String)

le quité la declaración del parámetro, estaba volviendo a redefinir esta cadena por eso el error.
:lol: .

Seguimos trabajando es esto...
Muchas thanks.

P.D. En pie las sugerencias, tips, regaños etc. :wink:

Por Rafeo

650 de clabLevel

3 tutoriales
1 articulo

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 07 Feb 2007 03:56 pm
Que tal ?. Aquí les tengo mi WIP (work in progress).
Ya me genera los items, pero... sin foto, ademàs el valor del onRelease que se puede ver aquì en el còdigo me devuelve undefined.

Help !

Código :

 private function __xmlContenedorLoaded(): Void {
       for (var i in xmlContenedor.firstChild.childNodes){
            //  agrega un nuevo elemento al panel
         attachMovie("item","item"+i,this.getNextHighestDepth());
         //  establece el text para headline del item 
            this["item"+i].headline.text=xmlContenedor.firstChild.childNodes[i].childNodes[0].firstChild;
         //  establece el text para el foot del item         
            this["item"+i].foot.text=xmlContenedor.firstChild.childNodes[i].childNodes[2].firstChild;
         //  establece la foto del item
         this["item"+i].foto.loadMovie(String(xmlContenedor.firstChild.childNodes[i].childNodes[3].firstChild));
         trace("foto= "+ String(xmlContenedor.firstChild.childNodes[i].childNodes[3].firstChild));
         //  posiciona cada item
         this["item"+i]._y=i* this["item"+i]._height;
         this["item"+i].urlVideo=String(xmlContenedor.firstChild.childNodes[i].childNodes[1].firstChild);
            this["item"+i].onRelease=function(){
            trace(this["item"+i].urlVideo);
         }
            trace(this["item" + i]);
      }
  }
:oops:

Por Rafeo

650 de clabLevel

3 tutoriales
1 articulo

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 07 Feb 2007 05:16 pm

Código :

 trace(this.urlVideo);

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 07 Feb 2007 05:29 pm
Jejeje, muchas gracias Dano, tienes razón. :wink:

La imagen ahora es la que no he podido cargar desde la clase. La dirección de las imágenes .jpg las estoy tomando del mismo XMl.

Por Rafeo

650 de clabLevel

3 tutoriales
1 articulo

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 07 Feb 2007 11:42 pm
Les mentí, sí funciona esta línea :oops:

Código :

this["item"+i].foto.loadMovie(String(xmlContenedor.firstChild.childNodes[i].childNodes[3].firstChild));

Me acabo de dar cuenta que un compañero no había subido las imágenes a las que hace referencia el XML .

Mil gracias compas!.

Por Rafeo

650 de clabLevel

3 tutoriales
1 articulo

Genero:Masculino  

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.