Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

diegolauro

[Resolvido] Como receber o resultado da Classe

Recommended Posts

Então, tive também a brilhante idéia de fazer uma classe que carregasse para mim o XML. Com isso, todo o projeto que uso XML poderia aproveitá-la. Com pesquisas na internet consegui adaptá-la. Eu passo o arquivo XML e ela carrega bonitinho.

 

Porém, na Timeline, lah no Fla eu queria recebê-la como um Xml e usá-la da seguinte maneira:

nomedaClasse.primeiro[0].segundo[0]

 

Nada além do convencional, pois preciso resgatar os valores contidos no XML. O que eu preciso fazer para ele me retornar algo manipulável, como eu preciso?

 

Esta é a classe:

//
// LoadXML
//
//  Created by Ben Honda-Rottler on 2007-06-01. Based on original code by Alessandro Crugnola
//
package core{
    import flash.net.URLLoader
    import flash.net.URLRequest
    import flash.xml.XMLDocument;
    import flash.errors.*
    import flash.events.*

    public class LoadXML {
        private var loader : URLLoader;
        private var mainXML : XML;
        
        public function CarregarXML(arquivo:String) {
            loader = new URLLoader();
            loader.addEventListener(Event.COMPLETE, onComplete);
            loader.load(new URLRequest(arquivo));
        }
        
        private function onComplete(evt:Event) {
            try {
                mainXML = new XML(loader.data)
                return mainXML;
            } catch(e:Error) {
                trace("Error: " + e.message)
                return;
            }
        }
    }
}

E aqui está o que eu chamo na Timeline:

 

 

import core.LoadXML;

var xmlLoader:LoadXML = new LoadXML();
xmlLoader.CarregarXML("xml/lugares.xml");

Eu trabalhava bastante com AS2, mas estou me aventurando agora no conceito de classes. Espero receber alguma dica.

 

Vlw gente!

Compartilhar este post


Link para o post
Compartilhar em outros sites

bastaria deixar a variavel "mainXML" como public, e na função onComplete, tirar os "return"

 

então para acessar ficaria: nomedaClasse.mainXML.primeiro[0].segundo[0]

 

 

 

você pode colocar uns método get para acessar essa variável para não ter perigo te altera-la

 

 

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

ao invés de usar:

 

nomedaClasse.mainXML.primeiro[0].segundo[0]

você usaria:

 

nomedaClasse.dados.primeiro[0].segundo[0]

 

 

 

então dentro da classe você deixa:

 

private var mainXML : XML;
public function get dados():XML{
   return  mainXML 
}

 

assim o mainXML fica private, e não pode ser acessado diretamente ou alterado

 

 

 

[]ps

Compartilhar este post


Link para o post
Compartilhar em outros sites

deu certo, ficou assim minha classe:

 

//
// LoadXML
//
//  Based on original code by Alessandro Crugnola.
//  Created by Ben Honda-Rottler on 2007-06-01.
//  Modified by Diego Lauro on 2009-07-15.
//
package core{
    import flash.net.URLLoader
    import flash.net.URLRequest
    import flash.xml.XMLDocument
    import flash.errors.*
    import flash.events.*

    public class LoadXML extends EventDispatcher {
        private var loader : URLLoader;
        public var mainXML : XML;
        
        public function CarregarXML(arquivo:String) {
            loader = new URLLoader();
            loader.addEventListener(Event.COMPLETE, onComplete);
            loader.load(new URLRequest(arquivo));
        }
        
        private function onComplete(evt:Event) {
            try {
                mainXML = new XML(loader.data);
            } catch(e:Error) {
                trace("Error: " + e.message)
                return;
            }
            dispatchEvent( evt );
        }
        
        public function get returnData() {
            return mainXML;
        }
        
        
    }
}

 

E faço agora as chamadas no SWF assim:

 

import core.LoadXML;
var xmlLoader:LoadXML = new LoadXML();
var xmlLugar:XML;

//Load XML
carregaXML("xml/lugares.xml")

function carregaXML(arquivo):void{
    xmlLoader.CarregarXML(arquivo);
    xmlLoader.addEventListener( Event.COMPLETE, onRequestComplete, false, 0, true);
}

function onRequestComplete(evt:Event ):void{
    xmlLugar = evt.target.returnData;
    trace(xmlLugar.lugar[0].imagem[0]);
}

 

Eu estou com novos problemas agora, acho só que vou colocar em outro Post para não cunfundir ninguém que estiver procurando informações sobre o problema do retorno de classes.

 

Obrigado a todos.

 

 

ps: Podem usar a classe acima, ela é bem prática.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.