Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 Flex 4.6-事件处理冲突_Actionscript 3_Apache Flex_Datagrid_Event Handling_Flex4 - Fatal编程技术网

Actionscript 3 Flex 4.6-事件处理冲突

Actionscript 3 Flex 4.6-事件处理冲突,actionscript-3,apache-flex,datagrid,event-handling,flex4,Actionscript 3,Apache Flex,Datagrid,Event Handling,Flex4,我有一个包含许多列的datagrid,其中一列包含一组使用ItemRenderer的按钮。datagrid本身有一个单击事件,显示一个面板。但是,当单击任何按钮时,不应执行datagrid的clicked事件。我怎样才能做到这一点?当前,按钮单击和datagrid事件都是在按钮单击时调度的 以下是目前的执行情况: Monitoring.mxml有一个datagrid,其中一列使用itemrender存储一个set a按钮 <s:GridColumn width="300" dataFie

我有一个包含许多列的datagrid,其中一列包含一组使用ItemRenderer的按钮。datagrid本身有一个单击事件,显示一个面板。但是,当单击任何按钮时,不应执行datagrid的clicked事件。我怎样才能做到这一点?当前,按钮单击和datagrid事件都是在按钮单击时调度的

以下是目前的执行情况:


Monitoring.mxml有一个datagrid,其中一列使用itemrender存储一个set a按钮

<s:GridColumn width="300" dataField="" headerText="Control Buttons"
                          itemRenderer="com.example.ItemRenderer.ButtonControlsItemRenderer">
</s:GridColumn>         
已在监控.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
}

谢谢你,非常感谢你的帮助

尝试在按钮单击菜单中调用stopImmediatePropagation函数。鼠标事件将冒泡

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

谢谢你的回复。我试过了,但是datagrid的clicked事件仍然被触发。我只需要发送按钮单击事件。是否在btn_logButtonHandler和btn_AdvisoryButtonHandler中都添加了stopImmediatePropagation?是的,但它仍然不起作用。我打印了eventPhase和eventCurrentTarget,似乎datagrid的clicked事件是首先执行的。我认为使用
stopImmediatePropagation()
在这里不起作用的原因是因为我们讨论的是两种不同的事件类型。查看每个处理程序中使用的事件类型:
MouseEvent
GridEvent
。无法停止其他事件的传播@GZZY您是否尝试过收听常规的
鼠标事件。单击网格上的
?可能存在这样的问题,因为他们费心创建了一个单独的
GridEvent
类型。您还可以尝试使用
GridEvent
columnIndex
column
属性来了解用户何时单击您的神奇按钮。我刚刚找到了相同的原因。起初我以为它是在数据网格上添加的MouseeEvent。因此,尝试使用MouseEvent而不是GridEvent。
[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
}
protected function btn_log_clickHandler(event:MouseEvent):void {
   event.stopImmediatePropagation();
   var myEventObject:Event = new Event("logButtonEventRenderer",true);
   dispatchEvent(myEventObject);
}