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 <[email protected]> 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 <[email protected]> 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 [email protected]
> > Para sair da lista, envie um email em branco para
> > [email protected]
> > 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 [email protected]
> Para sair da lista, envie um email em branco para
> [email protected]
> 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 [email protected]
Para sair da lista, envie um email em branco para
[email protected]
Mais opções estão disponíveis em http://groups.google.com/group/flexdev