Muito Obrigado Kurumin deu certo!!!



Att.
Willian Zacariotto
Flash Developer AS3 + Engines
E-mail: willianzacario...@terra.com.br
E-mail: willianzacario...@yahoo.com.br
E-mail: wil...@gmail.com
Messenger: wil...@msn.com

-----Mensagem original-----
De: flexdev@googlegroups.com [mailto:flex...@googlegroups.com] Em nome de
Kurumin
Enviada em: sexta-feira, 14 de maio de 2010 14:25
Para: flexdev
Assunto: [flexdev] Re: função que retorna um xml

ops esqueci do void
callback sempre é void

private function _completo(e:Event):void
{
       xmlp = new XML(urll.data);
      dispatchEvent(new Event(EVENT_LOAD_COMPLETE));

}

On May 14, 2:22 pm, Kurumin <edmargomes....@gmail.com> wrote:
> 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 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

-- 
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