Actionscript 3 单击ItemRenderer中的复选框时单击事件激发
我有一个itemRenderer自定义组件内嵌在我的DataGrid组件中。当选中或取消选中复选框(在itemRenderer组件中)时,我需要在包含类(与DataGrid处于相同级别)中触发事件。我该怎么做Actionscript 3 单击ItemRenderer中的复选框时单击事件激发,actionscript-3,apache-flex,Actionscript 3,Apache Flex,我有一个itemRenderer自定义组件内嵌在我的DataGrid组件中。当选中或取消选中复选框(在itemRenderer组件中)时,我需要在包含类(与DataGrid处于相同级别)中触发事件。我该怎么做 <mx:DataGrid id="dg" width="100%" dataProvider="{dgProvider}" editable="true" itemClick="dg_itemClickHandler(event)"> <mx:columns>
<mx:DataGrid id="dg" width="100%" dataProvider="{dgProvider}" editable="true" itemClick="dg_itemClickHandler(event)">
<mx:columns>
<mx:DataGridColumn dataField="selected" width="100" headerText="Include:" textAlign="center" editable="true" editorDataField="cbSelected" rendererIsEditor="true">
<mx:itemRenderer>
<mx:Component>
<!-- We need this canvas because it centers the checkbox: -->
<mx:Canvas width="100" textAlign="center">
<mx:Script>
<![CDATA[
// Define a property for returning
// the new value to the cell.
[Bindable]
public var cbSelected:Boolean;
protected function selectedCheckbox_clickHandler(event:MouseEvent):void
{
cbSelected = selectedCheckbox.selected;
}
]]>
</mx:Script>
<mx:CheckBox
id="selectedCheckbox"
selected="{data.selected}"
horizontalCenter="0"
click="selectedCheckbox_clickHandler(event)" />
</mx:Canvas>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
</mx:columns>
这里有一些事情在起作用。。。第一个是你要求的,第二个是我认为你真正需要的 首先,当您说“包含类”时,我假设您指的是DataGrid的父级。这与itemRenderer的父级非常不同。为了让DataGrid的父级从itemRenderer的代码中分派事件,我将使用 我不喜欢outerDocument的用户,因为它破坏了封装 但是,我怀疑您需要在父级中有一个侦听器,父级是否触发事件并不重要。在这种情况下,您可以使用事件的Bubble属性创建一个冒泡的事件:
protected function selectedCheckbox_clickHandler(event:MouseEvent):void
{
cbSelected = selectedCheckbox.selected;
outerDocument.dispatchEvent(new Event('myEvent',true));
}
您可以监听层次结构链中任何组件上的事件,一直监听到主应用程序。这包括您的DataGrid和DataGrid的父容器。该事件不会显示在MXML代码提示中,但您可以使用addEventListener方法添加EventListener:
dataGrid.addEventListener('myEvent',myEventListener);
当您需要告诉家长从itemRenderer执行某些操作时;从渲染器冒泡事件是我的首选方法
dataGrid.addEventListener('myEvent',myEventListener);