2012-03-08 5 views
0
에서 이벤트 발송

이벤트를 파견하는 것에 대해 많이 읽었지만 여전히 작동하지 않습니다. 클래스가 있고이 클래스를 사용하는 다른 클래스에서 이벤트를 볼 수있게하려고합니다. Main 클래스 : 메인 클래스에 대한 이벤트를 전달플래시 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)); 
    } 
} 

, 프록시 데이터 목록을 표시하려면 추가됩니다. 그리고 네, function complete firing입니다. 왜냐하면 2 초 후에 progressstate를 확인하면 값이 1이되기 때문입니다. 이벤트를 파견하는 여러 가지 방법을 시도했습니다. 나는 아직도 나의 메인 클래스에서이 클래스 이벤트를 얻을 수 없다. 또한 가능한 경우 추가 이벤트 클래스를 만들지 않고이 이벤트로 데이터를 보낼 수 있기를 원합니다. 어떤 도움을 주셔서 감사합니다.

+1

로드하기 전에 수신기를 추가하십시오. – www0z0k

+1

문제가 아닌지 testproxy 클래스의 complete-handler에 올바른 매개 변수가 설정되어 있지 않습니다 ('complete (event : Event)'여야 함). 사실 컴파일러 오류가 발생합니다.). ProxyStream 클래스의 나머지 부분을 게시하는 경우에도 유용 할 수 있습니다. –

+0

dispatchEvent의 "COMPLETE"를 소문자로 변경하십시오. flash.events.Event.COMPLETE == "완료"(소문자) – Eduardo

답변

0

완전한 이벤트 리스너에 올바른 매개 변수가 없습니다. complete(event:Event):void이어야하며 complete()

-1

내가 거주중인 경우 Flex 용 메이트 프레임 워크를 사용하기 시작합니다.

요약하면 프로젝트를위한 글로벌 이벤트 버스입니다.

+0

데이터를 보내는 방법을 알고 싶은 사람에게 유용 할 수 있습니다. 나는 dispatchEvent를 사용했다. (새로운 DataEvent (Event.COMPLETE, true, true, e.target.data)); ProxyStream 클래스에서 가져온 다음 main() 함수를 사용하여 가져옵니다 (e : DataEvent) {textspace.text = e.data;} thanks =) – speedy

0

ProxyStreamdispatchEvent(e)을 입력하면 ProxyStream 개체의 전체 이벤트가 다시 전달됩니다.

addEventListener(Event.COMPLETE, completeHandler); 

을 그리고 : 당신의 testproxy에서

, 이렇게

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

여기서 가장 큰 문제는, 내 생각, 핸들러 함수는 런타임 인 ​​인수를 허용하지 않는다는 것입니다 오류. 하나의 인수를 받아 들여야합니다.