2012-03-08 72 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" 
} 

這裏的主要問題,我認爲,那是你的處理函數不接受任何參數,這是一個運行時錯誤。它應該接受一個論點。