Comunidad de diseño web y desarrollo en internet online

Problemas con AS3 y diseño Singleton

Citar            
MensajeEscrito el 11 Jul 2008 08:30 pm
Hola a todos muy buenas tardes:

Tengo un gran problema, estoy diseñando una aplicacion en Flash CS3 que lee su contenido desde un archivo XML. esta aplicacion se compone de varias capas y varios simbolos, dentro de una capa tengo un simbolo que a su ves tiene un componente list al que quiero llenar con los datos recuperados por la clase que cree para recuperarlos datos XML

El problema que tengo es como pasar los datos XML a mi componente list, si la clase que cree la mando a llamar desde la capa principal en el fotograma 1.

Prove creando una clase singleton, y variables estaticas, y si me almacena los datos, pero cuando la vuelvo a llamar desde el componente list o desde otra clase, me marca null y no concerva los datos.

el codigo de la clase que cree es el siguienteÑ

Código :

[Bindable]
   public class utilGlobal
   {   
      public var contXML:XML;
      
      private static var instance:utilGlobal;
      
      public function utilGlobal(){
      }
   
      public static function getInstance():utilGlobal
      {
         if(instance == null)
         {
            instance = new utilGlobal();
         }
         return instance;
      }
   }

Si alguien me pudiera ayudar se los agradecria de verdad. :P
Editado por eldervaz

Por slipkfata

3 de clabLevel



Genero:Masculino  

México

msie7
Citar            
MensajeEscrito el 11 Jul 2008 10:59 pm
Si usas un singleton NO tiene sentido usar más variables estáticas que la variable de la instancia. Declaras las variables como públicas, y deberías poder accederlas desde TuSingleton.getInstance().variable.

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 11 Jul 2008 11:07 pm
Sip, exactamente a si es como accedo a la variable, pero al momento en que le asigno un valor, y muestro el contenido de la variable dentro de la funcion me los muestra correctamente, el codigo es el siguiente:

Código :

private function newXML(e.Event)`
{
   utilGlobal.getInstance().contXML = new XML(e.target.data);
   trace (utilGlobal.getInstance()contXML);
}


pero cuando accedo a esta variable desde otra clase o desde otra funcion desde la misma clase, me marca null, y nose por que hace esto. si esta declarada como estatica.

Gracias por tu ayuda.

Por slipkfata

3 de clabLevel



Genero:Masculino  

México

msie7
Citar            
MensajeEscrito el 11 Jul 2008 11:10 pm
pues primero es probar si de verdad puedes acceder al Singleton.
Para eso, trace(elNombreDeTuClase);
Si no puedes, es que necesitas importarlo.

Si no es eso, es que accedes a esa variable ANTES de que haya sucedido el evento de carga del xml.

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 11 Jul 2008 11:44 pm
Gracias por la respuesta, pero ahora tengo otro problema, tengo el siguiente codigo:

Código :

private function loadXML():XML
var contXML:XML;
var xmlLoader:URLLoader = new URLLoader();
trace(contXML); 
xmlLoader.addEventListener(Event.COMPLETE, function getXML(e:Event)                  {
   XML.ignoreWhitespace = true;
                contXML = new XML(e.target.data);                  
   });
   xmlLoader.load(new URLRequest(path));
   trace(contXML);
}


y quisiera que me regresara el valor de contXML que se carga en la funcion getXML, pero la variable contXML, fuera de la funcion me marca null, y no se como hacer para retornar su valor.

Muchas gracias por la respuesta anterior Zah

Por slipkfata

3 de clabLevel



Genero:Masculino  

México

msie7
Citar            
MensajeEscrito el 11 Jul 2008 11:49 pm
No se puede hacer eso. No puedes acceder a los datos del xml antes de que se cargue. Y cuando se cargue se ejecutará el listener del evento, que por cierto, mejor definirlo aparte. A partir del listener debes continuar las acciones en las que supones que tu xml se ha cargado.

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 12 Jul 2008 12:07 am
Haaa, y no sabes si hay una forma para regresar la variable XML, con el contenido XML. por que la verdad nose como, y seria facil si lo tuviera en un fotograma, pero lo tengo en un clase, y deceo que retorne el valor con el contenido XML para poder usarlo en otra clase.

de antemano muchas Gracias.

Por slipkfata

3 de clabLevel



Genero:Masculino  

México

msie7
Citar            
MensajeEscrito el 12 Jul 2008 04:28 pm
No se si esto te servira porque no entiendo lo que es singleton pero entiendo que quieres cargar el archivo XML y este este disponible para otra clase: bueno mira la clase que trae el XML debe de lanzar un nuevo evento que confirme que esta cargado completamente:
Bueno algo asi;
Clase cargaXml2.as

Código :

package scripts.clases
{
   import flash.events.*;
   import flash.xml.*;
   import flash.net.*
   public class cargaXml2 extends EventDispatcher{
      private var xml:XML;
      private var loader:URLLoader;
      public function cargaXml2(direccion:String){
         loader=new URLLoader();
         loader.load(new URLRequest(direccion));
         loader.dataFormat='text';
         loader.addEventListener(Event.COMPLETE,completado)
      }
      private function completado(event:Event):void{
         try {
            xml= new XML(event.target.data);
            dispatchEvent(new Event("xmlCargado"));
         }catch(err:TypeError){
            trace (err)
         }
      }
      public function get xmlDatos():XML{
         return xml;
      }
   }
}


Esta clase cargaXml2 crea una instacia de la clase URLLoader enviando la direccion del archivo que se cargara, una vez que se complete la carga en la intancia Loader lanza un nuevo evento con dispatchEvent(new Event('xmlCargado')).
En la pelicula Principal en el panel de acciones
Bueno y con este codigo crea una instancia de la clase cargaXml2.as y llama al evento xmlCargado para estar seguros que se ha completado la carga y asi no de error de nulo o algo asi.

Código :

import scripts.clases.*
var miXML:cargaXml2=new cargaXml2('xml/fotos.xml');
miXML.addEventListener('xmlCargado',completo);
function completo(event:Event):void{
   trace (miXML.xmlDatos)
}


Espero haberte ayudado y confundir

Por FlexandFlash

48 de clabLevel



 

msie
Citar            
MensajeEscrito el 13 Jul 2008 05:39 pm
Muchas Gracias, me sirvio de mucho lo que publicaste. :)

Por slipkfata

3 de clabLevel



Genero:Masculino  

México

msie7

 

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