Mehrere Variablen/Arrays aus einer Funktion returnen

Neurodeamon

Erfahrenes Mitglied
Hi,

habe ein kleines AS3 Problem. Da AS3 nicht wirklich mein Fachgebiet ist und im Forum noch niemand diese Frage gestellt hat nutze ich die Gelegenheit als erster zu fragen:

<<-- SNIPP -->>
Code:
var myXML:XML = new XML();
var XML_URL:String = "http://domain.tld/xml.php";
var myXMLURL:URLRequest = new URLRequest(XML_URL);
var myLoader:URLLoader = new URLLoader(myXMLURL);
myLoader.addEventListener("complete", xmlLoaded);
function xmlLoaded(event:Event){
    myXML = XML(myLoader.data);
    var lastUpdate:Date = new Date(myXML.@lastupdate*1000);
    for(var item:String in myXML.article.title) {
		ArrTitle.push(myXML.article.title[item]);
    }
    anzahl = arrTitle.length;
}
<<-- SNIPP -->>

Erklärung:
Ich lese eine XML-Datei ein und verarbeite die Daten. Im Beispielcode wäre das das Datum des letzten Updates, die Überschriften und die Anzahl der Artikel.
Wie bekomme ich all diese Daten aus der Funktion? Ein Return gibt ja nur ein einzelnes Elemet aus. Ich brauche die Arrays/Variablen aber quasi global im gesamten ActionScript. Bisher habe ich versucht die daten als Array oder als Object auszugeben, erhielt aber immer Fehlermeldungen das entweder der Typ nicht umgewandelt werden kann, oder andere Fehler ...
Ich wäre für ein funktionierendes Beispiel dankbar, weil ich langsam AS träume .... brrr
 
Ein Listener returned nichts, hat immer void als Rückgabetyp.

Zu dem Problem:
Hierbei gibt es mehrere Möglichkeiten.
Die einfachste wäre das befüllte Array als Parameter an einen Funktionsaufruf zu hängen welche dann die Daten verarbeitet:

PHP:
function xmlLoaded(event:Event){
    myXML = XML(myLoader.data);
    var lastUpdate:Date = new Date(myXML.@lastupdate*1000);
    for(var item:String in myXML.article.title) {
        ArrTitle.push(myXML.article.title[item]);
    }
    anzahl = arrTitle.length;
	
	parseData(arrTitle)
}

function parseData(theArr):void{
	for(var item:* in theArr){
		//...
	}
}

Für gewöhnlich legt man aber solche Datenstrukturen in ValueObjects ab.
(Multidim.) -Arrays tragen nicht sehr viel zur Übersichtlichkeit bei.

ValueObject bilden deine Datenstruktur ab, zB:
PHP:
package {
	
	public class DataVo{
		
		public var date:Date;
		public var title:String;
		public var text:String;
		
		public function DataVo() {}
		
	}

}

Daten in Vo's legen und abrufen:

PHP:
function xmlLoaded(event:Event){
    myXML = XML(myLoader.data);

    for(var item:String in myXML.article.title) {
		var dataVo:DataVo = new DataVo();
		dataVo.title = myXML.article.title[item];
		dataVo.text = myXML.article.text[item];
      	//....
		
		myArr.push(dataVo);
    }

	
	parseData(myArr)
}

function parseData(theArr):void{
	for(var item:* in theArr){
		trace(item.title)
		trace(item.text)
		//...
	}
}
 
In speichere die value objects Klasse in eine .as Datei und lade sie mit

include "valueobject.as";
import fl.controls.Button;
import fl.transitions.*;
import fl.transitions.easing.*;
import fl.containers.UILoader;
import flash.events.MouseEvent;

Doch ich erhalte ständig den Fehler "1037: Pakete dürfen nicht verschachtelt sein"

Was mache ich falsch?

P.S.: Ich habe mittlerweile Value Object Generatoren gefunden, die aber dann ganz andere Fehler produzieren.
Meine Googlesuche ergibt auch nur Treffer mit anderen Problemen. Arghh..
 
Zuletzt bearbeitet:
Lege die Klasse (zb. DataVo.as) in dem Ordner in der auch deine FLA ist , dann kannst du sie ganz einfach importieren:

PHP:
import DataVo;

Flash findet diese Klasse dann dort.
Möchtest du es in ein anderes Verzeichniss (Package) legen müßtest du in Flash ein classpath angeben in dem deine Klassen sind und dann von dort aus relativ den pfad angeben. zb import com.models.vo.DataVo;
 
Zuletzt bearbeitet:
Jetzt brat' mir einen einen Storch....
Nun wo ich die Datei so wie in Deinem letzten Post genannt habe klappt es. Mit meinem Dateinamen wollte es nicht.
Okay, ich werde nicht weiter darüber grübeln - jetzt funktioniert es!

Danke!
 

Neue Beiträge

Zurück