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