Flex 4.6 - 事件处理冲突

时间:2013-06-24 01:48:09

标签: actionscript-3 flex datagrid event-handling flex4

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

以下是当前的实施:


Monitoring.mxml ,其中包含 datagrid ,其中一列使用 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
}

谢谢,非常感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

尝试在按钮单击hanler.Mouse事件中调用stopImmediatePropagation函数。

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