我阅读了很多关于调度事件的内容,但仍无法使其发挥作用。我有一个类,并希望它的事件对于使用这个类的其他类是可见的。主要课程:
import special.proxy.ProxyStream;
public class testproxy extends Sprite
{
var textspace:TextField=new TextField();
var proxydata:*;
public function testproxy()
{
textspace.autoSize="left";
textspace.text="ready";
addChild(textspace);
try
{
proxydata=new ProxyStream();
addChild(proxydata);
proxydata.load(proxyurl_string, fileurl_string);
proxydata.addEventListener("COMPLETE", complete);
proxydata.addEventListener(Event.COMPLETE, complete);
}
catch(e:*){textspace.text=String(e);}
setTimeout(checkProgress, 2000);
}
function checkProgress(){textspace.text=proxydata.progressstate;}
function complete(){textspace.text="loaded";}
}
主要类的调度事件的类:
import flash.events.*;
public class ProxyStream extends Sprite {
public var progressstate:String="0";
//[Event(name="complete", type="flash.events.Event")]
[Event(name="complete", type="flash.events.Event.COMPLETE")]
private function complete(e:Event):void {
progressstate="1";
dispatchEvent(e);
dispatchEvent(new Event("COMPLETE", true, true));
//dispatchEvent(new Event(Event.COMPLETE, true, true));
//dispatchEvent(new DataEvent("COMPLETE", false, false, e.target.data));
}
}
正如我们所看到的,代理数据被添加到显示列表中。是的,功能完全触发,因为当我在2秒后检查progressstate时,它有值1.我尝试了许多不同的调度事件方式。我仍然无法在我的主课上得到这个课程。如果可能的话,我还希望能够使用此事件发送数据,而无需另外创建自己的事件类。谢谢你的帮助。
答案 0 :(得分:0)
您的完整事件列表器没有正确的参数。它应该是complete(event:Event):void
,而不是complete()
答案 1 :(得分:0)
在ProxyStream
中,只需执行dispatchEvent(e)
,即可再次从ProxyStream
对象发送完整事件。
在testproxy
中,执行此操作:
addEventListener(Event.COMPLETE, completeHandler);
和
private function completeHandler(event:Event):void
{
textspace.text = "loaded"
}
我认为,这里的主要问题是你的处理函数不接受任何参数,这是一个运行时错误。它应该接受一个论点。
答案 2 :(得分:-1)
如果我在你的位置,我会开始使用Flex的配合框架。
简而言之,它是您项目的全球事件总线。