【发布时间】:2010-06-03 21:11:54
【问题描述】:
我创建了一个 AS 类用作数据模型,如下所示:
package
{
import mx.controls.Alert;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.rpc.http.HTTPService;
public class Model
{
private var xmlService:HTTPService;
private var _xml:XML;
private var xmlChanged:Boolean = false;
public function Model()
{
}
public function loadXML(url:String):void
{
xmlService = new HTTPService();
if (!url)
xmlService.url = "DATAPOINTS.xml";
else
xmlService.url = url;
xmlService.resultFormat = "e4x";
xmlService.addEventListener(ResultEvent.RESULT, setXML);
xmlService.addEventListener(FaultEvent.FAULT, faultXML);
xmlService.send();
}
private function setXML(event:ResultEvent):void
{
xmlChanged = true;
this._xml = event.result as XML;
}
private function faultXML(event:FaultEvent):void
{
Alert.show("RAF data could not be loaded.");
}
public function get xml():XML
{
return _xml;
}
}
}
在我的主应用程序中,我正在启动应用程序并调用 loadXML 函数来获取 XML:
<fx:Script>
<![CDATA[
import mx.containers.Form;
import mx.containers.FormItem;
import mx.containers.VBox;
import mx.controls.Alert;
import mx.controls.Button;
import mx.controls.Label;
import mx.controls.Text;
import mx.controls.TextInput;
import spark.components.NavigatorContent;
private function init():void
{
var model:Model = new Model();
model.loadXML(null);
//the following line executes before model.loadXML has finished...
var xml:XML = model.xml;
}
]]>
</fx:Script>
我遇到的问题是 getter 函数在 loadXML 完成之前正在运行,因此我的主应用程序中的 XML 变量在堆栈跟踪中出现未定义。具体来说,loadXML函数调用ResultEvent.RESULT,然后跳转到setXML等……主app中的代码继续执行,而loadXML等待结果,所以主app中的getter(var xml:XML = model. xml;) 在 setXML 定义变量之前执行。
如何在此处设置一个条件,告诉 getter 等到 loadXML() 函数完成后再运行?
【问题讨论】:
-
你想使用异步令牌
标签: xml apache-flex actionscript