2010년 10월 1일 금요일

[ActionScript] addEventListener시 파라미터 추가

현재 상황

  • 화면상에 여러개의 버튼과 textfield를 추가
  • script로 for문을 돌려서 실행하였고 그걸 다시 line 별로 같은 line의 textfield값의 받아서 처리 해야함
  • script에서 new로 button을 생성하다보니.. addEventListener 처리를 하다보니 받을 수 있는 값은 event 밖에 없음

처리 방법

  • button 상속후 버튼에 사용할 propeties 정의 setter/getter 추가
  • script에서 for문 이용해서 button 생성시 id값 넘겨줌
  • event 처리부에서 event.currentTarget.새로정의한properties 값 받아서 처리

[code]package custom
{
 import mx.controls.Button;  public class ExtendButton extends Button
 {
 
  private var _currentId:String;  public function ExtendButton()
  {
   super();
  }
 
  public function get currentId():String {
   return _currentId;
  }
  public function set currentId(currentId:String):void {
   _currentId = currentId;
  }
 
 
 }
}[/code]

 

위 처러 만든 후에

[code]var button:ExtendButton = new ExtendButton();
 for(var i:int=1;i<10;i++) {
  button.currentId = "a"+i;
 }
 
 button.addEventListener(MouseEvent.CLICK,function(event:MouseEvent):void{
  trace(event.currentTarget.currentId)
 });[/code]

 

이렇게 만들었음

 

------------------------------------------------------------------------------

여기서 부터는 질문

 http://blog.flashplatform.kr/tag/keep-generated-actionscript

 

위의 링크방식대로 한다고 하면

 

generated라고 옵션은 줘서 as 스크립트를 전부 만들어서 거기에서 추가적으로

 

처리를 해야지 처리가 가능한거지?? ㅡㅡ;;

 

아니면 안되는건지 알고 싶습니다.

 

 

댓글 4개:

  1. for문이니깐.... Repeater쓰는 것이고



    for를 쓰던 (as) repeater (mxml)를 쓰던 내부 돌아가는 값에



    data를 만들고 쓰면 됨.



    ex)



    <mx:Repeater id="rp" dataProvider={arrData}>

    <mx:Button data="{rp.currentItem}" />

    </mx:Repeater>



    위같이 짜 놓으면 버튼 클릭 시 해당 버튼에서 data값을 추출해서 사용하면 땡~~



    참고 flex4에서는 data라는 프로퍼티 없으니 만들어 주면 됨.

    flex3에서는 그냥 쓰면 되고...



    그리고 중요한건 구글 검색하면 나옴......

    답글삭제
  2. function(event:MouseEvent):void{

    trace(event.currentTarget.currentId);



    // currentId에 따라 원하는 파라미터로 원하는 메소드를 호출함.

    switch(event.currentTarget.currentId)

    {

    case "A":

    somethingMethod(event, "this is Parameter");

    break;

    }

    }



    function somethingMethod(event:MouseEvent, param:String):void

    {

    // Something TODO:

    }

    답글삭제
  3. @검쉰 - 2010/11/04 11:57
    이렇게 하면 쉽게 되네요. currentTarget.currentId 하면 되는군요. 감사합니다.

    답글삭제
  4. @wonsama - 2010/11/01 19:17
    사람마다 전부 다른 생각과 방법을 가지고 있네요. ^^

    답글삭제