2012-03-08 73 views
0
的调度事件

我阅读了很多关于调度事件的内容,但仍无法使其正常工作。我有一个类,并希望事件对其他使用此类的类可见。主类:Flash AS3 - 类

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

+1

试装 – www0z0k 2012-03-08 09:32:41

+1

不知道这是否是问题,但你完全处理程序在testproxy类不正确的参数设置(它应该是'完整的(事件前添加监听器:事件)应在'事实上会导致编译器错误。)。如果您发布ProxyStream类的其余部分,也可能会有所帮助。 – 2012-03-08 09:33:59

+0

尝试将dispatchEvent中的“COMPLETE”更改为小写。 flash.events.Event.COMPLETE ==“complete”(小写) – Eduardo 2012-03-08 09:34:43

回答

0

您的完整活动列表器没有正确的参数。它应该是complete(event:Event):void,而不是complete()

-1

如果我在你的地方,我会开始使用Flex的队友框架。

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

+0

也许它可以用于想知道如何发送数据的人。我用dispatchEvent(新的DataEvent(Event.COMPLETE,true,true,e.target.data));在ProxyStream类中并在主类中使用函数完成(e:DataEvent){textspace.text = e.data;} thanks =) – speedy 2012-03-08 10:59:23

0

在您的ProxyStream中,只需执行dispatchEvent(e),它将从您的ProxyStream对象中再次分派完整事件。

在你testproxy,这样做:

addEventListener(Event.COMPLETE, completeHandler); 

和:

private function completeHandler(event:Event):void 
{ 
    textspace.text = "loaded" 
} 

这里的主要问题,我认为,那是你的处理函数不接受任何参数,这是一个运行时错误。它应该接受一个论点。