2013-06-24 2 views
0

많은 열이있는 DataGrid가 있고 그 중 하나의 열에 ItemRenderer를 사용하는 단추 집합이 들어 있습니다. DataGrid 자체에는 패널을 표시하는 클릭 이벤트가 있습니다. 그러나 단추 중 하나를 클릭하면 DataGrid의 클릭 된 이벤트가 실행되지 않아야합니다. 이것을 어떻게 할 수 있습니까? 현재 버튼 클릭과 데이터 그리드 이벤트 모두 버튼을 클릭하면 전달됩니다.Flex 4.6 - 이벤트 처리 충돌


Monitoring.mxml 데이터 격자과 열 중 하나가 세트에게 버튼 저장 의 itemRenderer를 사용하고있다 :

다음은 현재 구현이다. ButtonControlsItemRenderer.mxml 내부

<s:GridColumn width="300" dataField="" headerText="Control Buttons" 
          itemRenderer="com.example.ItemRenderer.ButtonControlsItemRenderer"> 
</s:GridColumn>   

, 나는 2 개 버튼이 - 로그인 및 자문

<s:Button id="btn_log" width="49" height="35" label="Log" 
       click="btn_log_clickHandler(event)"/> 
<s:Button id="btn_Advisory" width="81" height="35" label="Advisory" 
       click="btn_Advisory_clickHandler(event)"/> 

이들 두 버튼은이 기능과 데이터 그리드에 사용자 정의 이벤트를 파견한다.

protected function btn_log_clickHandler(event:MouseEvent):void { 
      var myEventObject:Event = new Event("logButtonEventRenderer",true); 
      dispatchEvent(myEventObject); 
} 

protected function btn_Advisory_clickHandler(event:MouseEvent):void{ 
      var myEventObject1:Event = new Event("AdvisoryButtonEventRenderer",true); 
      dispatchEvent(myEventObject1); 
} 

이벤트 메타 데이터는 선언 된 이벤트 리스너는 Monitoring.mxml에 추가되었습니다

[Event(name="logButtonEvent", type="com.example.GetSelectedSystemEvent")] 
[Event(name="AdvisoryButtonEvent", type="flash.events.Event")] 

dg_Events.addEventListener("logButtonEventRenderer",btn_logButtonHandler); 
dg_Events.addEventListener("AdvisoryButtonEventRenderer",btn_AdvisoryButtonHandler); 

protected function btn_logButtonHandler(event:Event):void{ 
    // Do something; 
} 

protected function btn_AdvisoryButtonHandler(event:Event):void{ 
    // Do something 
} 

//Datagrid Click Event 
protected function dg_Events_gridClickHandler(event:GridEvent):void { 
    // Display Panel 
} 

감사합니다 정말 당신의 도움을 주셔서 감사합니다!

답변

2

버튼을 클릭하여 stopImmediatePropagation 함수를 호출 해보십시오. hanler.Mouse 이벤트가 거품으로 나타납니다.

protected function btn_log_clickHandler(event:MouseEvent):void { 
    event.stopImmediatePropagation(); 
    var myEventObject:Event = new Event("logButtonEventRenderer",true); 
    dispatchEvent(myEventObject); 
} 
+0

답장을 보내 주셔서 감사합니다. 시도했지만 DataGrid의 클릭 이벤트가 여전히 트리거되었습니다. 나는 버튼 클릭 이벤트 만 전달하면됩니다. – Gzzzy

+0

stopImmediatePropagation을 btn_logButtonHandler와 btn_AdvisoryButtonHandler에 모두 추가 했습니까? – Pan

+0

그래도 여전히 작동하지 않습니다. eventPhase 및 eventCurrentTarget을 인쇄하고 DataGrid의 클릭 이벤트가 먼저 실행되는 것으로 보입니다. – Gzzzy

관련 문제