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