2009-06-10 4 views
0
fileReference.addEventListener(Event.COMPLETE, uploadCompleteHandler); 

    private function uploadCompleteHandler(event:Event):void {} 

위의 코드는 Actionscript에 이벤트 리스너를 추가하는 한 가지 방법입니다. 기본적으로 콜백 함수에는 name 이벤트와 Event 유형의 인수가 있어야합니다. 인수없이이 함수를 선언하는 방법이 인가 :인수가없는 콜백 함수가있는 이벤트 리스너를 추가하는 코드

private function uploadCompleteHandler():void {} 

편집 : 그것은 MXML에서 인수없이 이벤트 처리기를 추가 할 수 있습니다. 그래서 한 학생이 알고 싶었습니다. 왜 그 행동 스크립트에서 같은 것을 할 수 없었습니까?

+0

왜 그렇게하고 싶습니까? –

+0

mxml에 인수없이 이벤트 핸들러를 추가 할 수 있습니다. 한 학생이 알고 싶었던 이유는 무엇입니까? 을 actionscript에서 사용할 수없는 이유는 무엇입니까? – dharm0us

답변

8

이유는 MXML에서 무엇을 작성하는 핸들러가 실제로되지 않는 것입니다, 핸들러에서 실행됩니다 것입니다 . -keep-generated-actionscript 플래그로 컴파일하는 경우 (Flex Builder에서 설정하려면 마우스 오른쪽 버튼을 클릭하여 프로젝트 속성을 열고 Flex 컴파일러를 선택하고 -keep-generated-actionscript를 추가 컴파일러 인수에 추가하십시오. 컴파일러가 해당 이벤트에 대한 핸들러를 작성했으며 본문은 mxml에 작성한 내용으로 구성됩니다.

그래서 당신이 같은 경우 : 당신은 당신이 실제로이 명령을주고있는 것을 알 이미 수

click="doSomething();" 

을, 그건 당신이 addEventHandler를 사용할 때처럼 당신이 전달하는 방법을 참조 아니다. 두 번째 매개 변수는 아니다

this.addEventListener(MouseEvent.CLICK, myComponent_Click); 

주의 사항 :

private function myComponent_Click(evt : MouseEvent) : void 
{ 
    doSomething(); 
} 

그리고 다른 곳 이벤트 리스너의 추가 같은 파일 :

그럼 당신은 같이 생성 된 파일 뭔가를해야합니다 함수 결과, 그것은 함수 참조입니다. 왜냐하면 함수 호출이 없다는 것을 나타내는 괄호가 있고, 우리의 특정 함수는 getter가 아니기 때문입니다.

click="doSomething(event);" 

는 MXML 이벤트의 값에 쓰기 무엇이든 :

click="doSomething(); doSomethingElse();" 

당신은 심지어 당신의 방법에 이벤트 매개 변수를 전달할 수 있습니다

당신은 또한 같은 MXML에서 더 많은 통화를 지정할 수 있습니다 (사용하기에 적합한 용어가 아닌지)는 actionscript 이벤트에 대해 생성 된 핸들러의 본문이됩니다.

3

아니요, 이벤트 리스너로 등록하려고하면 이벤트가 실행될 때 런타임 예외가 발생합니다.

당신은 이벤트 객체 않고 직접 핸들러를 호출 할 수 있도록 다음과 같은 구문을 사용할 수 있습니다 :

private function uploadCompleteHandler(event:Event = null):void {} 
관련 문제