Flash AS3 - 来自类的调度事件

时间:2012-03-08 09:16:15

标签: actionscript-3

我阅读了很多关于调度事件的内容,但仍无法使其发挥作用。我有一个类,并希望它的事件对于使用这个类的其他类是可见的。主要课程:

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.我尝试了许多不同的调度事件方式。我仍然无法在我的主课上得到这个课程。如果可能的话,我还希望能够使用此事件发送数据,而无需另外创建自己的事件类。谢谢你的帮助。

3 个答案:

答案 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的配合框架。

简而言之,它是您项目的全球事件总线。