Warum wird meine Funktion nicht aufgerufen? as.Datei

ali-gator

Erfahrenes Mitglied
Hallo,

ich habe diesen Code in einer externen AS-Datei "runGallery.as":
PHP:
class runGallery {
	public function loadXML() {
		var picArray:Array = new Array();
		var configXML:XML = new XML();
		configXML.ignoreWhite = true;
		configXML.load("pictures.xml");
		configXML.onLoad = readPics;
	}
	public function readPics(successful) {
		testen();
		if(successful) {
			trace("erfolgreich");
		} else {
			trace("nichter erfolgreich");
		}
	}
	public function testen() {
		trace("test");
	}
}

in meinem Hauptfilm rufe ich das ganze mit

PHP:
var myRunGallery:runGallery = new runGallery();
myRunGallery.loadXML();

Nun wird die Funktion testen(); nicht aufgerufen....Warum?!!?
Ich hab keine Ahnung, ist auch das erste mal dass ich mit externen Klassendateien arbeite, also helft mir bitte mal auf die Sprünge...
bis dann,

ali-gator
 
Hi,

1. musst Du die externe Klasse auch importieren, um sie verwenden zu können:
Code:
import runGallery;

2. Solltest Du einen Konstruktor anlegen (ist aber nicht zwingend erforderlich)

3. Gehen bei Deiner Version in der Funktion "readPics" die Referenzen auf das lokale Klassenobjekt und das XML-Objekt verloren. Probier es einmal so:
Code:
class runGallery {
    public function loadXML() {
        var picArray:Array = new Array();
        var configXML:XML = new XML();
        configXML.ignoreWhite = true;
        configXML.load("pictures.xml");
        var that:runGallery = this;
        configXML.onLoad = function(s:Boolean) {
            that.readPics(this, s);
        }
    }
    public function readPics(xmlObj, successful) {
        testen();
        if(successful) {
            trace("erfolgreich");
        } else {
            trace("nicht erfolgreich");
        }
    }
    public function testen() {
        trace("test");
    }
}
So hast Du in der Funktion "readPics" noch Zugriff auf das (lokal in der Funktion "loadXML" erstellte) XML-Objekt.

Gruß
.
 
Danke! Ich werds gleich mal ausprobieren.

Für was brauch denn den Konstruktor?! Um das Objekt zu erzeugen? Die Klasse?!
Und wenn ja, wie sieht der aus?
bis dann

ali-gator
 
Hab gerade mal deinen Code in die Klassendatei kopiert und die Klasse zusätzlich mit import runGallery importiert... Aber die Funktion testen(); wurde trotzdem nicht aufgerufen....
ali-gator
 
Hi,

im Konstruktor kannst Du Dinge erledigen, die schon beim Anlegen der Klasse sinnvoll sind (z.B. ein übergebenes Argument in einer Klassenvariable unterbringen). Gibst Du keinen an, so wird ein (leerer) Standardkonstruktor erstellt.

Da mein Code bei mir funktioniert hat, bitte ich Dich, einmal die .fla und die .as als Anhang zu posten.

Gruß
.
 
Kannst du mir mal so ein Konstruktor Beispiel zeigen?!

Ich hab das ganze nochmal ausprobiert und dann gings...Eine Frage hab ich noch:

PHP:
var that:runGallery = this;

was ist this? Ist das der Objektname den man hier:

PHP:
var myRunGallery:runGallery = new runGallery();
myRunGallery.loadXML();

angibt? also myRunGallery?!
bis dann!
ali-gator
 
Hi,

damit erzeuge ich einen temporären Verweis auf die lokale Klasseninstanz, da der Direktzugriff darauf in der Callback-Methode "XML.onLoad" nicht mehr möglich ist.

Gruß
.
 
Zurück