2009-12-05 3 views
0
package com.test{ 
    import flash.display.Sprite; 
    import flash.display.MovieClip; 
    import com.greensock.*; 
    import com.greensock.easing.*; 
    import com.test.CreateRoundRectButton; 
    import flash.events.*; 
    import flash.net.*; 

    public class DetailView extends MovieClip { 
     private var detailPanel:MovieClip=new MovieClip(); 
     private var detailData:Object; 
     private var closeBtn:Sprite; 
     private var DetailForm:DetailViewForm=new DetailViewForm(); 

     public function DetailView() { 

      createPanel(); 
      addChild(detailPanel) 
      detailPanel.addChild(DetailForm); 
     } 
     private function createPanel() 
     { 

      closeBtn=new CreateRoundRectButton(30,30,10,1,0xFFFFFF,"X",0x000000); 
      closeBtn.x=DetailForm.width - 25; 
      closeBtn.y=2; 
      closeBtn.addEventListener(MouseEvent.MOUSE_UP, closePanel,false,0,true); 
      DetailForm.addChild(closeBtn) 
     } 

     public function closePanel(evt:MouseEvent) { 
      removeChild(evt.currentTarget) 
     } 
    } 
} 

어떻게이 클래스의 하위를 제거 할 수 있습니까? 닫기 버튼을 누르면 윈도우를 제거해야합니다. 그러나이 사건을 제대로하지 못하고 있습니다. 내가 어떻게 이것을 제거 할 수 있니?플래시 AS3에서 인스턴스를 닫거나 제거하기위한 이벤트를 얻는 방법

답변

3

Event.currentTarget이 의도 한 것 (또는 단지 코딩 오류)에 대한 오해가있는 것 같습니다. closePanel이 closeBtn에서 마우스를 올려 놓은 결과 호출되면 evt.currentTarget의 값은 closeBtn입니다. 리스너를 추가 한 객체이므로 이벤트를 처리하는 객체입니다. closeBtn은 DetailView의 하위 항목이 아니므로 아무 일도 일어나지 않습니다. 사실, 디버그 플레이어에서 코드의 디버그 빌드를 실행하려면 removeChild 호출이 예외를 발생시키는 것을 볼 수 있습니다. MOUSE_UP 당신이 리스너를 추가 할 수 있습니다 거품 때문에 ...

public function closePanel(evt:MouseEvent) { 
    removeChild(detailPanel); 
} 

OR을 :

당신이 detailPanel 당신이 단순히 currentTarget을 무시하고 이미 제거 할 알고있는 것을 제거 할 수 있습니다 다음 제거하려는 가정 를 detailPanel에 보내고 evt.currentTarget이 detailPanel이되어 removeChild 호출이 작동합니다.

detailPanel.addEventListener(MouseEvent.MOUSE_UP, closePanel, false, 0, true); 
관련 문제