2013-06-24 43 views
0

我有一个有许多列的数据网格,其中一列包含一组使用ItemRenderer的按钮。 datagrid本身有一个点击事件,显示一个面板。但是,当单击任何按钮时,不应执行数据网格的单击事件。我怎样才能做到这一点?目前按钮点击和数据网格事件都是在点击按钮时分派的。Flex 4.6 - 事件处理冲突

下面是当前实现:


Monitoring.mxml具有数据网格和列之一使用的ItemRenderer存储一组一个按钮。

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

里面的ButtonControlsItemRenderer.mxml,我有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

您是否在btn_logBu​​ttonHandler和btn_AdvisoryButtonHandler中添加了stopImmediatePropagation? – Pan

+0

是的,但它仍然无法正常工作。我打印eventPhase和eventCurrentTarget,看起来datagrid的clicked事件首先被执行。 – Gzzzy