您在课堂上所做的几乎都完成了,但是有一些事情需要纠正:
首先,在类减速的顶层中,您只能定义成员(属性和方法)。目前你正在做的事情很好,但你也试图在这个范围内运行一些实际的代码:
myLoader.load(new URLRequest("http://myWebsite/myFile.xml"));
myLoader.addEventListener(Event.COMPLETE, processXML);
这将抛出错误,您的课程将无法运行。要在创建类的实例时立即运行代码,您需要使用 a constructor
,它是一个与在其中声明的类同名的函数(区分大小写)。将其转换为代码将如下所示,您会注意到我已经创建了构造函数并将罪魁祸首代码放入其中:
public class XMLLoad
{
public var myXML:XML;
public var myLoader:URLLoader = new URLLoader();
// This is the constructor.
public function XMLLoad()
{
myLoader.load(new URLRequest("http://myWebsite/myFile.xml"));
myLoader.addEventListener(Event.COMPLETE, processXML);
}
public function processXML(e:Event):void
{
myXML = new XML(e.target.data);
trace(myXML);
}
}
您现在所做的是创建了一个类XMLLoad
。使用new
关键字,您可以创建该类的实例。在您的情况下,您只需要一个实例来执行您想要的操作,如下所示:
var xmlLoad:XMLLoad = new XMLLoad();
这将创建一个实例XMLLoad
并将其分配给变量xmlLoad
,通过它您将能够访问您在该类中定义的属性和方法。我们在上面创建的构造函数也将自动运行,这意味着您的类已经发起了对某些 XML 的请求。
不幸的是,由于对外部数据的请求是异步的(也就是说,它们在与您的应用程序的自然流程不同的时间线上执行),我们无法判断 XML 何时完全加载并且我们能够从外部使用它班级。然而,我们可以做的是XMLLoad
稍微改变类来帮助我们:
public class XMLLoad
{
public var myXML:XML;
public var myLoader:URLLoader = new URLLoader();
private var _callback:Function;
public function XMLLoad(callback:Function)
{
_callback = callback;
myLoader.load(new URLRequest("http://myWebsite/myFile.xml"));
myLoader.addEventListener(Event.COMPLETE, processXML);
}
public function processXML(e:Event):void
{
myXML = new XML(e.target.data);
_callback(myXML);
}
}
我们在这里所做的是修改构造函数以接受对函数的引用,该函数应该接受 type 的参数XML
。然后我们修改了您的processXML
函数以执行回调并将接收到的 XML 发送给它。这意味着您现在可以这样做:
var xmlLoad:XMLLoad = new XMLLoad(done);
function done(xml:XML):void
{
trace(xml);
}
这意味着您将能够在该函数中继续您的应用程序,该done
函数将为您提供完全加载的 XML。