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 em http://groups.google.com/group/flexdev