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 单击ItemRenderer中的复选框时单击事件激发_Actionscript 3_Apache Flex - Fatal编程技术网

Actionscript 3 单击ItemRenderer中的复选框时单击事件激发

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>

我有一个itemRenderer自定义组件内嵌在我的DataGrid组件中。当选中或取消选中复选框(在itemRenderer组件中)时,我需要在包含类(与DataGrid处于相同级别)中触发事件。我该怎么做

<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);