Carregamento de dados externos é asincrona, quando vc pede  o xmlData
= new XML(exml.carregaXML());  não vem nada pois ainda nao foi chamado
a funçao _completo.
Entano nos temos:
Tempo 1: cria o objeto codeLayer
Tempo 2: Pede o carregamento do xml
Tempo 3: cria o objeto xmlData
Tempo 4: termina de carregar o xml

ou seja o termina de carregar o xml deveria vir antes de criar o
objeto xmlData.
outro problema é que seu metodo carregaXML nao retorna nada (void)
entao nao ira vir nada para dentro de new XML.


Sugiro fazer isso na sua classe codeLayer:

-------------------------
public class codeLayer extends EventDispatcher
{
       public static const EVENT_LOAD_COMPLETE:String =
"loadComplete";
...
private var xmlp:XML = new XML();
public function get dataXml():XML
{
    return xmlp;
}
...

//retire a função completo de dentro da outra função, coloque como
private na classe, é uma consideração de boas praticas em as3
private function _completo(e:Event):XML
{
       xmlp = new XML(urll.data);
      dispatchEvent(new Event(EVENT_LOAD_COMPLETE));

}
------------------------------------------------------------------------------------------

no seu mxml vc faz o seguinte:

-------------------------------------------------------------
var exml:codeLayer;
private function loadXML():void
{
    exml = new codeLayer();
    exml.carregaXML();
    exml.addEventListener(codeLayer.EVENT_LOAD_COMPLETE,
codeLayer_loadHandler);
}
private function codeLayer_loadHandler(e:Event):void
{
   //somente ver o trace em modo debug la no flex
   trace(exml.dataXml)
    exml.removeEventListener(codeLayer.EVENT_LOAD_COMPLETE,
codeLayer_loadHandler);

}

On May 14, 1:38 pm, Willian Zacariotto <wil...@gmail.com> wrote:
> Olá galera boa tarde, é o seguinte estou começando em flex e estou
> montando uma classe que vai ficar todas as minhas funções:
>
> -------------------------------------------
> "codeLayer.as"
>
> package camada
> {
>         import flash.display.MovieClip;
>         import flash.events.Event;
>         import flash.net.URLLoader;
>         import flash.net.URLRequest;
>
>         import mx.controls.Alert;
>
>         public class codeLayer
>         {
>                 private var xmlp:XML = new XML();
>                 private var requestUrl:URLRequest;
>                 private var urll:URLLoader;
>
>                 public function codeLayer()
>                 {
>
>                 }
>
>                 public function carregaXML():void
>                 {
>                         requestUrl = new URLRequest("map.php");
>                         urll = new URLLoader();
>                         urll.load(requestUrl);
>                         urll.addEventListener(Event.COMPLETE, _completo);
>
>                         function _completo(e:Event):XML
>                         {
>                                 xmlp = new XML(urll.data);
>                                 return xmlp;
>                         }
>                 }
>         }}
>
> _________________________________________________________________
>
> e estou chamando ela na minha aplicação da seguinte forma
>
> -------------------------------------------------------------
> <mx:Script>
>                 <![CDATA[
>
>                         import camada.codeLayer;
>
>                         import mx.controls.Alert;
>
>                         private var xmlData:XML;
>
>                         private function loadXML():void
>                         {
>                                 var exml:codeLayer = new codeLayer();
>                                 xmlData = new XML(exml.carregaXML());
>                         }
>                 ]]>
>         </mx:Script>
> _____________________________________________________________
>
> ai quando vou dar um Alert.show(xmlData); ele aparece sem valor
> nenhum, mais quando eu dou o alert dentro da minha classe aparece o
> conteudo do xml certo. o que estou fazendo de errado?
>
> --
> Você recebeu esta mensagem porque está inscrito na lista "flexdev"
> Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com
> Para sair da lista, envie um email em branco para 
> flexdev-unsubscr...@googlegroups.com
> Mais opções estão disponíveis emhttp://groups.google.com/group/flexdev

-- 
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com
Para sair da lista, envie um email em branco para 
flexdev-unsubscr...@googlegroups.com
Mais opções estão disponíveis em http://groups.google.com/group/flexdev

Responder a