Попробуйте вместо этого:
Main.as (класс документа):
package
{
import com.example.CourseXML;
import flash.display.Sprite;
import flash.events.Event;
public class Main extends Sprite
{
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}// end function
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
var courseXml:CourseXML = new CourseXML("xml/course.xml");
courseXml.addEventListener(CourseXML.LOAD_COMPLETE, onCourseXmlLoadComplete);
trace(courseXml.title)// output: null
}// end function
private function onCourseXmlLoadComplete(e:Event):void
{
var courseXml:CourseXML = CourseXML(e.target);
trace(courseXml.title) // output: Test Course
}// end function
}// end class
}// end package
CouseXML.as
package com.example
{
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.net.URLLoader;
import flash.net.URLRequest;
public class CourseXML extends EventDispatcher
{
public static const LOAD_COMPLETE:String = "loadComplete";
private var _urlLoader:URLLoader;
private var _xml:XML;
public function get title():String
{
var title:String;
try
{
title = _xml.@title;
}
catch (e:TypeError)
{
title = null;
}// end catch
return title;
}// end function
public function CourseXML(url:String)
{
_urlLoader = new URLLoader();
_urlLoader.addEventListener(Event.COMPLETE, onUrlLoaderComplete);
_urlLoader.load(new URLRequest(url));
}// end function
private function onUrlLoaderComplete(e:Event):void
{
_xml = XML(URLLoader(e.target).data);
dispatchEvent(new Event(CourseXML.LOAD_COMPLETE));
}// end function
}// end class
}// end package
Если вам интересно узнать о try
и catch
в методе получения title()
объекта CourseXML
, я поставлю это так, если вы попытаетесь получить доступ к любому из членов свойства _xml
до того, как файл xml будет загружен и назначен на него, вы не получите неприятный TypeError
.
[UPDATE]
Подумав, попытка и отлов не потребуются, было бы проще использовать условное выражение, подобное следующему:
public function get title():String
{
return (_xml) ? _xml.@title : null;
}// end function