Tip And Tech2008.06.07 12:07

AS3에는 Event클래스나 MouseEvent클래스 KeyBoardEvent , FocusEvent등 다양한 이벤트들은 제공하여 준다, 이 이벤트 클래스를 활용하여 보기 좋게 이벤트 이름을 설정하거나 필요한 값을 이벤트에 실어서 보낼수 있게 만들어 보자.

가령 섬네일을 눌렀을 때 섬네일은 버튼이며 마우스 이벤트를 사용하면 된다.
thumb.addEventListener( MouseEvent.MOUSE_DOWN , onSelect )

function onSelect(  event:MouseEvent ):void
{
        섬네일을 눌렀을 때 할일...
}


그러면 해당되는 이미지가 커다란 다른 View Pannel에서 크게 보여진다고 하자. 이 때 섬네일에서 필요한 최소의 정보는 커다란 사진의 경로를 View Pannel에게 알려주는 것이다.
function onSelect(  event:MouseEvent ):void
{
        dispatchEvent( 발생시킬 이벤트 )
}

그러나 어도비에서 만들어준 기본 이벤트에는 view Pannel에게 알려줄 사진경로의 정보를 포함시켜서 이벤트를 발생시킬 수 없다... 따라서 우리는 나름대로의 이벤트를 만들어서 그안에 정보를 담아 보내주도록 한다.
아래와 같이 Event를 상속받아서 기능을 추가한다. 추가되는 기능은 photoURL라는 파라미터를 만들어서 이벤트가 발생할 때 그 값을 받아 넘겨주도록 하는 것이다.
package
{
import flash.events.Event;
public class SelectEvent extends Event
 {
  public static const Select:String = "select";
  public var photoURL:String;
 
public function SelectEvent ( photoURL:String , type:String, bubbles:Boolean=false, cancelable:Boolean=false )
  {
   super( type, bubbles, cancelable );
   this.photoURL= photoURL;
  }
 
  override public function clone() : Event
  {
   return new UserEvent(this.photoURL, this.type, this.bubbles, this.cancelable);
  }
 }
}

위의 SelectEvent를 섬네일에서 dispatch 하면 아래와 같이 코딩한다.
private var bigSizeURL:String = "큰사진의 URL경로"
function onSelect(  event:MouseEvent ):void
{
        dispatchEvent( new SelectEvent(this.bigSizeURL,"select") )
       //SelectEvent에
photoURL의 값을 자신의 bigSizeURL로 설정
}

이처럼 섬네일에서만 알고있는 자신의 큰사진경로를 이벤트 발생시 이벤트의 파라미터로 등록하고 발송한다.
viewPannel에서는 사진을 불러들여야 하므로 다음과 같이 리스너가 등록되어있을 것이다.
thumbList.addEventListener.(SelectEvent.Select , onLoadPhoto)
function onLoadPhoto( event:SelectEvent ):void
{
      var photoUrl : String = event.photoURL;//SelectEvent에 포함되어있는 파라미터
      이미지를 photoUrl 에서 불러오는 코드....
}

위처럼 viewPannel에서는 섬네일 목록을 SelectEvent로 보고있다가 이벤트가 발생하면 섬네일에서 넘겨주는
url정보를 바탕으로 큰 사진의 이미지를 불러오도록 하는것이다.
중요한 것은 이벤트도 클래스이며 이를 상속받아 기능추가하거나 재정의가 가능하여 필요에 맞게 고쳐서 사용하면 되는 것이다.





Posted by 정윤수 버터백통