webForumDet fria alternativet

Ang Actionscripts Klasser och XML

3 svar · 357 visningar · startad av Macson

MacsonMedlem sedan juni 20072 inlägg
#1

Hej!

Sitter och försöker läsa en XML-fil med hjälp av en klass. Vill att när en instans av classen skapas ska den läsa en XML och spara in den i en variabel som heter strXMLData.

Problemet är att jag inte kan komma åt att spara datan i variabeln i funktionen som läser XML-filen.

Här är min kod:

 
class MCCue {
		
	public var tuteInfo_xml:XML;	
	public var strXMLData:String;
		
	// Constructor function
	public function MCCue () {
		
		trace("Kör MMcue-funktionen");		
		
		public var tuteInfo_xml = new XML;
		tuteInfo_xml.ignoreWhite = true;
		
		tuteInfo_xml.onLoad = myLoad;

		tuteInfo_xml.load("rcs.xml");
		
		//putXML("Här hamnar datan rätt");
	}
	
	public function myLoad(sucess) {
		if(sucess) {
			putXML(this.toString());
		}
	}

	public function putXML(strMyString:String) {
		this.strXMLData =  strMyString;
	}
	public function printXML() {
		return(this.strXMLData);
	}
}

Är det någon som förstår varför putXML(this.toString()); inte fungerar? Det känner som man borde använda något i stil med _global, _root, _parent eller liknande, men har testat alla och inget fungerar.

Sitter nästan och gråter för att jag är så irriterad på att jag inte kan hitta lösningen, kort sagt, är väldigt tacksam för all hjälp som kan fås.

/ Markus

mirandirMedlem sedan maj 2003750 inlägg
#2

När myLoad körs så körs den med xml-objektet som "scope" därför hittar den inte putXML() som är en metod till MCCue objektet.

Har för mig att du kan lagra en referens tillbaka till MCCue objektet i XML-objektet och sedan använda den för att anropa putXML():

public function MCCue () {
		
	trace("Kör MMcue-funktionen");		
		
	public var tuteInfo_xml = new XML;
	tuteInfo_xml.ignoreWhite = true;
	[b]tuteInfo_xml.MCCueObj = this;
	tuteInfo_xml.onLoad = function()
	{
		this.MCCueObj.putXML(this.toString())
	};[/b]

	tuteInfo_xml.load("rcs.xml");
		
}

/Mirandir

MacsonMedlem sedan juni 20072 inlägg
#3

Hej Mirandir!

Är grymt tacksam för att du tog dig tid att titta på det. Får det fortfarande inte att fungera.

Ändrade koden till detta:

class MCCue {
		
	//public var tuteInfo_xml:XML;	
	public var strXMLData:String;
		
	// Constructor function
	public function MCCue () {
		
		trace("MMcue-function");		
		
		var tuteInfo_xml = new XML;
		tuteInfo_xml.ignoreWhite = true;
		
		tuteInfo_xml.MCCueObj = this;
		tuteInfo_xml.onLoad = function(sucess) {
				if(sucess) {
					//trace(this.toString());
					this.MCCueObj.putXML("Content from tuteInfo_xml");
				}
			}

		tuteInfo_xml.load("rcs.xml");
		
		//putXML("This is the content");
	}

	public function putXML(strMyString:String) {
		this.strXMLData =  strMyString;
	}
	public function printXML() {
		return(this.strXMLData);
	}

}

Kör jag trace i "if(sucess) {" skrivs värdet ut, men det sparas inte ner med putXML. Däremot om jag kommenterar in raden "//putXML("This is the content");" Så skrivs det så de måste ha med referensen till den metoden att göra.

Någon som ser vad jag borde göra?

crisse6Medlem sedan dec. 20002 526 inlägg
#4

så här kan du göra, själv använder jag mig av Delegate-classen,

import mx.utils.Delegate;

sen te x objekt.onLoad = Delegate.create(this, funktion);

Eller Big Spaceships Delegate-class, googla. :)

Men kör så här:

class MCCue {
		
	//public var tuteInfo_xml:XML;	
	public var strXMLData:String;
		
	// Constructor function
	public function MCCue () {
		
		trace("MMcue-function");		
		
		var tuteInfo_xml = new XML;
		tuteInfo_xml.ignoreWhite = true;
		
		tuteInfo_xml.MCCueObj = this;
                var ref = this;

		tuteInfo_xml.onLoad = function(sucess) {
				if(sucess) {
					//trace(this.toString());
					ref.putXML(this.toString());
				}
			}

		tuteInfo_xml.load("rcs.xml");
		
		//putXML("This is the content");
	}

	public function putXML(strMyString:String) {
		this.strXMLData =  strMyString;
	}
	public function printXML() {
		return(this.strXMLData);
	}

}
131 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)