Actionscript 3 Flex 4.6-事件处理冲突
我有一个包含许多列的datagrid,其中一列包含一组使用ItemRenderer的按钮。datagrid本身有一个单击事件,显示一个面板。但是,当单击任何按钮时,不应执行datagrid的clicked事件。我怎样才能做到这一点?当前,按钮单击和datagrid事件都是在按钮单击时调度的 以下是目前的执行情况: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
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);
}