Flash Actionscript 3-如何在删除某个事件后保留该事件的值
在我的事件处理程序函数期间(函数在event.COMPLETE之后执行),我为我的xml对象设置了一个值(xml=newXML(e.currentTarget.data);),如果我在事件函数处理程序中跟踪对象,它将显示我的xml数据 但是如果我试图在事件处理函数之外跟踪它,它不会显示我的xml内容。难道没有办法让我的xml对象内容值显示在其他函数中,而不是在事件处理程序函数中吗Flash Actionscript 3-如何在删除某个事件后保留该事件的值,flash,actionscript-3,flash-builder,flash-cs5,flash-cs4,Flash,Actionscript 3,Flash Builder,Flash Cs5,Flash Cs4,在我的事件处理程序函数期间(函数在event.COMPLETE之后执行),我为我的xml对象设置了一个值(xml=newXML(e.currentTarget.data);),如果我在事件函数处理程序中跟踪对象,它将显示我的xml数据 但是如果我试图在事件处理函数之外跟踪它,它不会显示我的xml内容。难道没有办法让我的xml对象内容值显示在其他函数中,而不是在事件处理程序函数中吗 private var xml:XML; public function XMLLoader(xmlURL:St
private var xml:XML;
public function XMLLoader(xmlURL:String)
{
var xmlURLRequest:URLRequest = new URLRequest(xmlURL);
var xmlURLLoader:URLLoader = new URLLoader(xmlURLRequest);
xmlURLLoader.addEventListener(Event.COMPLETE, xmlData);
}
private function xmlData(e:Event):void
{
e.currentTarget.removeEventListener(Event.COMPLETE, xmlData);
xml = new XML(e.currentTarget.data);
dispatchEvent(new Event(Event.COMPLETE));
trace(xml);
}
public function getXMLData():void
{
//I've find out that this shows null because this function is faster
//what do i do? put an event.complete in every following function?
trace(xml);
}
谢谢。我想您在
xmloader()
之后立即调用getXMLData()
,此时xml
对象仍然为空。尝试调用getXMLData()
内部的xmlData()
函数,您应该会看到区别。我认为您在xmloader()
之后立即调用getXMLData()
,此时xml
对象仍然为空。尝试调用getXMLData()
函数内部的xmlData()
函数,您应该会看到其中的区别。您可能在URLLoader完成之前调用了getXMLData(),但是,一般来说,您正在执行的代码是错误的。Actionscript没有任何阻塞,因此当您使用URLRequest实例化新的URLLoader时,它会立即开始加载操作。例如,如果文件已缓存,则在开始加载操作后附加它时,Event.COMPLETE侦听器可能永远不会启动
下面是创建和加载数据的理想过程:
var data:XML;
var urlLoader:URLLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, urlLoader_completeHandler);
urlLoader.load(new URLRequest("path"));
private function urlLoader_completeHandler(event:Event):void
{
data = new XML(urlLoader.data);
}
如果您想将其应用于您自己的XMLLoader类,我已经在AS3中包含了“适当的”实现……但是非常详细
import flash.net.URLLoader;
import flash.events.Event;
class XMLLoader extends URLLoader
{
public function XMLLoader()
{
super();
addEventListener(Event.COMPLETE, completeHandler);
}
private function completeHandler(event:Event):void
{
dispatchEvent(new XMLLoaderEvent(XMLLoaderEvent.COMPLETE, new XML(data)));
}
}
class XMLLoaderEvent extends Event
{
public static const COMPLETE:String = "xmlLoaderComplete";
public var data:XML;
public function XMLLoaderEvent(type:String, data:XML = null, bubbles:Boolean = false, cancelable:Boolean = false)
{
super(type, bubbles, cancelable);
this.data = data;
}
override public function clone():Event
{
return new XMLLoaderEvent(type, data, bubbles, cancelable);
}
}
要使用XMLLoader类,请执行以下操作:
var xmlLoader:XMLLoader = new XMLLoader();
xmlLoader.addEventListener(XMLLoaderEvent.COMPLETE, function(event:XMLLoaderEvent):void
{
trace(event.data);
});
xmlLoader.load(new URLRequest("data.xml"));
祝你好运 您可能在URLLoader完成之前调用了getXMLData(),但是,通常情况下,您正在执行的代码是错误的。Actionscript没有任何阻塞,因此当您使用URLRequest实例化新的URLLoader时,它会立即开始加载操作。例如,如果文件已缓存,则在开始加载操作后附加它时,Event.COMPLETE侦听器可能永远不会启动 下面是创建和加载数据的理想过程:
var data:XML;
var urlLoader:URLLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, urlLoader_completeHandler);
urlLoader.load(new URLRequest("path"));
private function urlLoader_completeHandler(event:Event):void
{
data = new XML(urlLoader.data);
}
如果您想将其应用于您自己的XMLLoader类,我已经在AS3中包含了“适当的”实现……但是非常详细
import flash.net.URLLoader;
import flash.events.Event;
class XMLLoader extends URLLoader
{
public function XMLLoader()
{
super();
addEventListener(Event.COMPLETE, completeHandler);
}
private function completeHandler(event:Event):void
{
dispatchEvent(new XMLLoaderEvent(XMLLoaderEvent.COMPLETE, new XML(data)));
}
}
class XMLLoaderEvent extends Event
{
public static const COMPLETE:String = "xmlLoaderComplete";
public var data:XML;
public function XMLLoaderEvent(type:String, data:XML = null, bubbles:Boolean = false, cancelable:Boolean = false)
{
super(type, bubbles, cancelable);
this.data = data;
}
override public function clone():Event
{
return new XMLLoaderEvent(type, data, bubbles, cancelable);
}
}
要使用XMLLoader类,请执行以下操作:
var xmlLoader:XMLLoader = new XMLLoader();
xmlLoader.addEventListener(XMLLoaderEvent.COMPLETE, function(event:XMLLoaderEvent):void
{
trace(event.data);
});
xmlLoader.load(new URLRequest("data.xml"));
祝你好运 更改跟踪方法以指示xml是否已加载…
你正在进入比赛状态
private var _xmlLoaded:Boolean=false;// add this to see if the xml is loaded
private function xmlData(e:Event):void
{
e.currentTarget.removeEventListener(Event.COMPLETE, xmlData);
xml = new XML(e.currentTarget.data);
_xmlLoaded=true;
dispatchEvent(new Event(Event.COMPLETE));
trace(xml);
}
public function getXMLData():void
{
if (_xmlLoaded)
trace(xml);
else
trace("not yet loaded");
}
更改跟踪方法以指示xml是否已加载…
你正在进入比赛状态
private var _xmlLoaded:Boolean=false;// add this to see if the xml is loaded
private function xmlData(e:Event):void
{
e.currentTarget.removeEventListener(Event.COMPLETE, xmlData);
xml = new XML(e.currentTarget.data);
_xmlLoaded=true;
dispatchEvent(new Event(Event.COMPLETE));
trace(xml);
}
public function getXMLData():void
{
if (_xmlLoaded)
trace(xml);
else
trace("not yet loaded");
}
//注意:如果要直接访问此“类”的函数而不使用该类上的任何事件侦听器,请使用此选项,因为它在每个函数上都有其事件侦听器(这导致只有一个函数getXMLData()) 私有var-xml:xml 公共函数XMLLoader(xmlURL:String) { } 私有函数xmlData(e:事件):void { } 公共函数getXMLData():void {
//注意:如果要直接访问此“类”的函数而不使用该类上的任何事件侦听器,请使用此选项,因为它在每个函数上都有其事件侦听器(这导致只有一个函数getXMLData()) 私有var-xml:xml 公共函数XMLLoader(xmlURL:String) { } 私有函数xmlData(e:事件):void { } 公共函数getXMLData():void {
私有var xml:xml;公共函数XMLLoader(xmlURL:String){var xmlURLRequest:URLRequest=new URLRequest(XmlUrlURL);var xmlURLLoader:URLLoader=new URLLoader(xmlURLRequest);xmlURLLoader.addEventListener(Event.COMPLETE,xmlData);}私有函数xmlData(e:Event):void{.currentTarget.removeEventListener(Event.COMPLETE,xmlData);xml=new-xml(e.currentTarget.data);dispatchEvent(new-Event(Event.COMPLETE));trace(xml);}公共函数getXMLData():void{trace(xml);}您可以在安装
xmloader
的地方发布代码并调用getXMLData()
method?公共类XMLLoader扩展了EventDispatcher{private var xml:xml;公共函数XMLLoader(xmlURL:String){var xmlURLRequest:URLRequest=new URLRequest(xmlURLRequest);var xmlURLLoader:URLLoader=new URLLoader(xmlURLRequest);xmlURLLoader.addEventListener(Event.COMPLETE,xmlData);}私有函数xmlData(e:Event):void{e.currentTarget.removeEventListener(Event.COMPLETE,xmlData);xml=new-xml(e.currentTarget.data);dispatchEvent(new-Event(Event.COMPLETE));trace(xml);//这个显示}公共函数getXMLData():xml{trace(xml);//这个不显示}您可以在您的问题中发布代码吗?这样更容易阅读。但我希望看到的是您将getXMLData()
和new-XMLLoader(“xmlURL”)
。私有变量xml:xml;公共函数XMLLoader(xmlURL:String){var-xmlURLRequest:URLRequest=new-URLRequest(xmlURL);var xmlURLLoader:URLLoader=new URLLoader(xmlURLRequest);xmlURLLoader.addEventListener(Event.COMPLETE,xmlData);}私有函数xmlData(e:Event):void{e.currentTarget.removeEventListener(Event.COMPLETE,xmlData);xml=new xml(e.currentTarget.data);dispatchEvent(new Event(Event.COMPLETE));跟踪(xml)}公共函数getXMLData():void{trace(xml);}您可以在安装XMLLoader
的地方发布代码,并调用getXMLData()
方法吗?公共类XMLLoader扩展EventDispatcher{private var xml:xml;公共函数XMLLoader(xmlURL:String){var XMLURLRRequest:URLRequest=new URLRequest(xmlURL);var xmlURLLoader:URLLoader=新的URLLoader(xmlURLRequest);xmlURLLoader.addEventListener(Event.COM