PDA

Volledige versie bekijken : Read data class


Freeji
%Europe/Berlin %804 %2010, 20:19
Hallo

Ik wil graag een aparte class maken die data uit een aantal XML haalt.
Nu doe ik dit als volgt maar dit is naar mijn idee niet goed


var readData : ReadBlogXML = new ReadBlogXML();
addChild(readData);


Correct me if i'm wrong, maar... met addChild voeg ik de class toe aan mijn DisplayObjectContainer. het een class die alleen maar xml's leest, hoef ik otch niet toe te voegen aan mijn displayobjectcontainer?

Kortom, hoe ziet een class eruit die alleen maar XML's uitleest en hoe benader ik zo'n class vanuit andere classes?

Met groet

sidar
%Europe/Berlin %835 %2010, 21:02
Addchild accepteerd alleen "DisplayObjects" ( dus alles dat daarvan overerft, zoals MovieClip)
Je xml file loader hoeft niet eens een MovieClip te zijn.

Je wilt alleen de data terug krijgen toch?

Freeji
%Europe/Berlin %917 %2010, 23:01
Bij het opstarten van mijn swf wil ik een class aanroepen die een xml uitleest en dit in een variabele laad. Daarna wil ik die var gebruiken om er data uit te halen. Hoe kan ik dat het beste doen? Omdat ik meerder xml in variabelen wil zetten wil ik hiervoor een aparte class maken zodat het allemaal bij elkaar blijft

sidar
%Europe/Berlin %947 %2010, 23:44
Ik heb mijn eigen class, maar dat is niet perse de beste manier.

package
{
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLRequest;

/**
* Loads an XML and uses a callback function to parse the data.
* @author Sidar Talei
*/
public class XMLLoader
{

private var mCallBack:Function;

public function XMLLoader(url:String, callBack:Function) : void
{
mCallBack = callBack;
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, xmlLoaded);
loader.load(new URLRequest(url));
}

private function xmlLoaded(e:Event) : void
{
(e.target as URLLoader).removeEventListener(Event.COMPLETE, xmlLoaded);
var xml:XML = new XML((e.target as URLLoader).data);
mCallBack.call(this, xml);
}

}

}

Wat je dus doet, is in de constructor een functie meegeven waar de data verwerkt wordt.
Vervolgens:

//In je main of waardan ook je het wilt gebruiken
var xmlloader:XMLLoader = new XMLLoader ("mijnUrlNaarXml", onXMLLoad);

//Als de data geladen is dan wordt de data "injected" in de parameter als argument van de functie die je
//toewijst, in dit geval is het onXMLLoad ( de naam kan je verzinnen zoals je wilt,
//ook de parameter naam, zolang het maar van het type XML is)

function onXMLLoad(xml:XML) : void
{
trace(xml);
}

Freeji
%Europe/Berlin %890 %2010, 22:22
Ik probeer de code gebruiken en tevens te bestuderen wat er gebeurt. Ik maak mijn project in FDT (voor het eerst) telkens als ik lokaal mijn XML aanroep krijg ik een error.

SecurityError: Error #2148: SWF file file:///C:/Documents%20and%20Settings/Freeji/workspace/Portfolio/bin/Main.swf cannot access local resource file:///C:/Documents%20and%20Settings/Freeji/workspace/Portfolio/bin/src/XML/Blog.xml. Only local-with-filesystem and trusted local SWF files may access local resources.

Iemand enig idee hoe ik dit (security) probleem kan oplossen?

sidar
%Europe/Berlin %900 %2010, 22:37
Wat de class doet is de data inladen( logisch), en dan waarneer de data binnen is, xmlLoaded uitvoeren.

In deze functie slaan we de data op via een xml variabele die we dan wegsturen naar de functie die we in de constructor hebben mee gegegeven.

onze constructor
public function XMLLoader(url:String, callBack:Function) : void
{
mCallBack = callBack;
....
onze xmlLoaded, let hier op de 2e parameter.
mCallBack.call(this, xml);

Hij blijkt dus gewoon te werken alleen heb je beveiligings problemen, ik weet niet hoe dat in FTD werkt. Online zou het wel moeten werken.
Ik heb het idee dat je in je FTD project of de compiler opties iets moet verandere.

BernardV
%Europe/Berlin %915 %2010, 22:58
Ja, FDT compiled/zet de html op network only, dus testen op een webserver.. of installeer even lamp/wamp etc en zet je workspace als documentroot.

Freeji
%Europe/Berlin %756 %2010, 19:08
Het inlezen van XML in FDT is inmiddels gelukt. Sidar, de code geeft fouten en ik snap niet zo goed waarom. Dit is de foutmelding

Type niet gevonden of geen constante bij compilatie. XMLLoader.
var XMLLoader : XMLLoader = new XMLLoader("http://www....Blog.xml", onXMLLoad);

zegt je dit iets?

Freeji
%Europe/Berlin %788 %2010, 19:56
Het is gelukt, mijn naam van mijn variabele was hetzelfde als die van mijn class...