2009-05-02 7 views
1

Wie warte ich auf das Laden einer externen TXT-Datei in ActionScript 3? Wenn ich URLLoader verwende, kann ich nicht garantieren, dass die Datei geladen wurde, da sie ein Ereignis auslöst, wenn es abgeschlossen ist. Ich rufe die Loader-Funktion von einer anderen Klasse an, damit ich nicht einfach die nächsten Aktionen in den Event-Listener stecken kann.Wie warte ich auf das Laden einer externen TXT-Datei in ActionScript 3?

Antwort

2

Um eine Textdatei (oder eine XML-Datei) laden Sie URLLoader verwenden können. Heres ein Beispiel für XML (so ziemlich das gleiche) von kirupa

var loader:URLLoader; 
loader = new URLLoader(); 
loader.addEventListener(Event.COMPLETE, xmlLoaded); 

var request:URLRequest = new URLRequest("file.xml"); 
loader.load(request); 
function xmlLoaded(event:Event):void { 
    var myXML:XML = new XML(loader.data); 
} 

Wenn Sie es von einer anderen Klasse aufrufen können Sie den Anrufer als Verweis auf die Eventlistener passieren und die Event.COMPLETE vom gerufenen Griff Klasse:

loader.addEventListener(Event.COMPLETE, caller_class.xmlLoaded); 

Idealerweise konnten Sie Ihre loader-Klasse wiederverwendbar machen und sie machen Eventdispatcher verlängern so statt der URLLoader hören Sie Ihre eigene Klasse zu hören. Ich poste keinen Code für das die Antwort einfach zu halten, aber here'sa paar Links, wenn Sie Interesse: An example for XML loader und Another example for a more complex image loader (to avoid confussions don´t read it unless you already understand the text/XML one)

Ich hoffe, es hilft :)


EDITED: Wie offenbar für die dispatch sind Sie auf der Suche Weg here'sa paar Tipps:

1) erweitern Klasse Eventdispatcher

public class YourClass extends EventDispatcher{ 

2) verwenden dispatchEvent(new Event("event_name")); das Ereignis aus einer anderen Klasse

3) Hören Sie sich diese Veranstaltung zu versenden. ZB: loader_class.addEventListener("event_name", callback);

* 4) Optional können Sie die Zeichenfolge ändern („event_name“) durch eine Konstante wie DispatcherClass.EVENT_NAME durch die Konstante in der Dispatcher-Klasse definiert public const EVENT_NAME:String = "event_name", und es von der anderen Klasse wie folgt nennen: loader_class.addEventListener(DispatcherClass.EVENT_NAME, callback);

Ich hoffe, jetzt ist alles klarer.

+0

Vielen Dank! Ich denke, es gibt keine Möglichkeit, dieses Problem funktionell zu lösen. Wenn ich "loader.addEventListener (Event.COMPLETE, caller_class.xmlLoaded);" mache, kann ich die 2 Klassen nicht getrennt halten, da caller_class in der Loader-Klasse codiert ist. Im Idealfall möchte ich die loading-Funktion von caller_class aufrufen, warten, bis sie beendet ist, und weiter Sachen in caller_class erledigen. – Archagon

+0

Sie müssen nicht unbedingt auf den aufrufenden Abschnitt verweisen, da Sie den Aufrufer als nicht typisierten Parameter erhalten könnten, aber ich denke, was Sie suchen, ist die andere Lösung, die ich erwähnt habe. Ich werde meinen Beitrag bearbeiten, um das zu erklären. – ozke