Typdiskrepanz

timäää

Erfahrenes Mitglied
Hi.
Ich hab da ein Problem... Ich habe eine as-Klasse, die eine XML-Datei laden soll. Wenn der Ladevorgang abgeschlossen ist, soll die Klasse die XML-Datei an eine andere, statische Klasse übergeben.

Der Code in der LoadKlasse ist folgender:
Code:
class xmlLoader
{
	var xmlLoadList:XML;
	var loadArray:Object;
	function xmlLoader()
	{
		xmlLoadList = new XML();
		xmlLoadList.ignoreWhite = true;
		xmlLoadList.onLoad = listLoaded;
		loadArray = new Object();
		loadList();
	}
	function loadList()
	{
		xmlLoadList.load("loadlist.xml");
	}
	function listLoaded(success)
	{
		if(success)
		{
			loadArray = xmlToFlashParser.createFlashObject(this);
			trace(loadArray[0]);
		}
		else
		{
			trace("WARNUNG: LISTE KONNTE NICHT GELADEN WERDEN!");
		}
	}
Die Funktion in der Parser-Klasse sieht folgendermaßen aus:
Code:
static function createFlashObject(parseObj:XML):Object
{
   //Hab das hier mal rausgekürzt.
}

Flash gibt mir jetz immer aus: "Zeile 29: Typdiskrepanz. loadArray = xmlToFlashParser.createFlashObject(this);", was ich nicht verstehe, da es sich doch bei dem "this" im Aufruf doch auch um eine XML-Klasse handeln müsste
 
Hi,

die genaue Ursache kann ich Dir auch nicht nennen; beim Aufruf über einen semianonymen Funktionsbezeichner scheint Dir Dein Typ abhanden zu kommen.

Workaroundvorschläge:
Code:
loadArray = xmlToFlashParser.createFlashObject(new XML(this.toString()));
(wird nicht wirklich performant sein), oder:


  • Aufruf so:
Code:
		xmlLoadList = new XML();
		xmlLoadList.ignoreWhite = true;
		var that = this;
		xmlLoadList.onLoad = function(s) {
			that.listLoaded(s);
		}
und dann:
Code:
loadArray = xmlToFlashParser.createFlashObject(this.xmlLoadList);
Auf diese Weist rufst Du die Methode "listLoaded" direkt als Member der aktuellen Instanz auf.

Gruß
.
 
Zurück