globale oder Objektvariablen in Funktionen deklarieren

inctube

Erfahrenes Mitglied
Hallo zusammen,

ich habe folgendes Problem:
Keine Ahnung warum das auf einmal nicht mehr geht.
Ich hab eine Funktion in der initialisiere ich ein Array auf _root.
Bisher in Flash MX ging das ohne Probleme, doch jetzt in Flash 8 ist das Array nur innerhalb der Funktion sichtbar.
Ich fülle es mit Daten aus einer XML-Datei.
Wenn ich das Array jetzt so initialisiere:
PHP:
var blubberArray:Array=[]
dann ist es innerhalb der Funktion die es befüllt voll aber außerhalb leer.
Auch mit _global geht nichts.
Ich bin am verzweifeln. Ich habe erst vor ein paar Wochen genau die gleiche Funktion benutzt und da gings. Jetzt hab ich das Projekt geöffnet in dem die original Funktion drin steht und hab das probiert. Geht, ohne Probleme.
Ich hab wirklich die Funktion nur kopiert und eingefügt.
Weiß jemand Rat?

thx intctube
 
Hi,

wenn Du eine Variable innerhalb einer Funktion mit "var" deklarierst, bekommst Du eine lokale Variable, die nur innerhalb dieser Funktion gültig ist. Um eine Objektvariable zu erstellen, kannst Du den Pfad voranstellen (ohne "var" natürlich):
Code:
function foo() {
    _root.mein_array:Array = new Array();
}

Gruß
.
 
Ja, genau. Aber was ich als trace außerhalb der Funktion bekomme ist undefined.
Ich glaub langsam das liegt gar nicht an der Programmierung sondern an einem kleinen bösen Varibalensauger der in meinem Programm sitzt und mich ärgert. :)

Also wenns so gehn muss, dann muss ich wohl noch probieren, warums bei mir jetzt nicht tut.

thx inctube
 
Hi,


EDIT: Wenn Du die Variable nicht mit "var" deklarierst, musst Du allerdings das :Array weglassen - Du verwendest in diesem Fall die AS1.0-Variante, Variablen zu erstellen.

Du kannst allerdings die Variable zuerst auf _root implizit typisieren und dann in der Funktion initialisieren:
Code:
var mein_array:Array;

function foo() {
     _root.mein_array = new Array();
}

foo();

trace(mein_array);

Gruß
.

Gruß
.
 
Das ist mein Code:

PHP:
var xmlFileName = "aktuell.xml";
loadXML();
function loadXML() {
	myXML = new XML();
	myXML.ignoreWhite = true;
	xmlLoad = xmlFileName;
	myXML.load(xmlLoad);
	myXML.onLoad = parseXML;
	function parseXML() {
		var anzahl = myXml.firstChild.childNodes.length;
		_root.spruchArray = new Array();
		for (var i = 0; i<=anzahl; i++) {
			_root.spruchArray[i] = myXml.firstChild.childNodes[i].attributes.spruch;
		}
	}
	trace(_root.spruchArray);
}
 
Hi,

is klar: Du versuchst, die Variable auszugeben, bevor die Ereignisfunktion "parseXML()" überhaupt aufgerufen wurde. ;) Die tut nämlich erst, wenn die xml-Datei tatsächlich geladen ist (was mindestens einige Millisekunden, wenn nicht länger dauert) - Deine trace-Aktion feuert allerdings schon, wenn "loadXML()" aufgerufen wird.

Starte lieber von "parseXML" aus eine weitere Funktion, die dann mit den empfangenen Daten arbeitet.

Gruß
.
 
Kleiner Tipp am Rande:

Oft verbirgt sich - wie hier - das Problem an einer Stelle, die man zuerst nicht vermutet. Statt die Fragestellung auf die eigene Vermutung auszurichten (auf _root deklarieren von Funktion aus), kommt man idr. schneller zum Ziel (sprich: einer befriedigenden Antwort), wenn man vorurteilsfrei den entsprechenden Code zusammen mit "Ist"- und "Soll"-Zustand postet. ;)

Grüße
.
 
Zurück