Comunidad de diseño web y desarrollo en internet online

AS3 Eventos

Citar            
MensajeEscrito el 30 May 2012 09:21 am
Hola, en primer lugar grácias de antemano por su ayuda. Estoy desarrolando una web en flex y como no, tengo algunas dudas. Dispongo de una clase que lee a través de un WebService un fichero xml con el idioma que en el que deseo trabajar. ( la lectura es correcta ).
El problema lo tengo que al cargar el MXML no muestra las etiquetas correctamente. Supongo que es un problema de sincronismo entre una y otra pero no sé como solucionarlo.

Clase de lectura del fichero xml:

Código ActionScript :

      public  var IdLanguage:String = "";
      public  var curdatalanguage:Array;
      private var xml:XMLDocument = new XMLDocument();
      private var decoder:SimpleXMLDecoder;
      private var datalanguage:Object;
      
      private var ws:services.web.WebH = new services.web.WebH;   
      private var ws2:CallResponder = new CallResponder;

      public function Language(iLang:String ) {
         IdLanguage = iLang
         ws2.addEventListener(ResultEvent.RESULT,wsCompleted);
         ws2.token = ws.ws_XmlGetIdioma();
      }
      
      private function wsCompleted(evt:ResultEvent):void{
            xml.parseXML(evt.result.toString());
            decoder = new SimpleXMLDecoder();
            datalanguage = decoder.decodeXML( xml );
         switch (IdLanguage) {
            case "CAT":
               curdatalanguage = ArrayUtil.toArray( datalanguage.idiomas.cat);               
               break;
            case "ESP":
               curdatalanguage = ArrayUtil.toArray( datalanguage.idiomas.esp);
               break;
            default:
               curdatalanguage = ArrayUtil.toArray( datalanguage.idiomas.cat);
               break;
         }
      
               public function g(idLang:Number, sDef:String):String {
         
         var str:String = "#" + sDef;
         
         if (( idLang >= 0 ) && (idLang <= curdatalanguage[0].length) ) {
            str = curdatalanguage[0][idLang].toString();
         }
         
         return str;
         
      }

Desde el MXML :
en el "creationcomplete", se llama a :
InitApp() {
cLang = new Language("CAT");
}



y en la parte del formulario, vemos :

<s:Label text="{cLang.g(60018,'Usuario')}" id="lblUser" textAlign="right" right="90" width="128" top="19"/>

( el problema es que en el Label, nunca muestra ningún valor )

Por JPNET

10 de clabLevel



 

firefox
Citar            
MensajeEscrito el 30 May 2012 10:54 am
Me autorespondo por si puede servir a alguién.

La solución aplicada ha sido crear un nuevo State que se activa al finalizar la carga de los valores del preinitialize y del creationcomplete.

Por JPNET

10 de clabLevel



 

firefox
Citar            
MensajeEscrito el 30 May 2012 01:19 pm
En realidad el problema es de sincronicidad. La etiqueta se crea antes de que se cargue el XML, y solicita su string que se devuelve nulo. Puedes usar binding, en ese caso el valor se actualizaria autom'aticamente cuando parsees el XML (pero debes definir todos los valores a traducir) o cargas el XML y recorres la interfase asignando los labels. Yo suelo hacer una clase diccionario en donde listo todos los strings de la interfase, luego uso a veces binding y a veces recorro la interfaz traduciendo (si el cambio de lenguaje debe ser inmediato)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 30 May 2012 03:12 pm
Grácias por la respuesta, Jorge.
Al no ser cambiable por el usuario el idioma ( ya que en este caso es decisión de empresa el idioma de trabajo), creo que inicialmente lo dejaré así, no obstante para otros casos seguiré tus indicaciones.

Por JPNET

10 de clabLevel



 

firefox

 

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