Apache flex 具有项目呈现器和自定义组件的flex自定义事件

Apache flex 具有项目呈现器和自定义组件的flex自定义事件,apache-flex,itemrenderer,custom-events,Apache Flex,Itemrenderer,Custom Events,好的,各位Flex专家,我需要一些帮助。我的主应用程序中有一个带有itemrenderer(mxml)的datagrid。在ir中按图像时,将打开一个自定义组件(mxml)。cc有一个按钮,用于调用主应用程序中的函数,该函数更新arraycollection(数据提供程序),从而更新datagrid。我尝试了parentDocument、outerDocument和自定义事件的几种变体,但我无法通过按钮使该函数工作。我想是b/c,我在ir中嵌套了cc。我直接从ir内部调用的任何东西都可以工作 有

好的,各位Flex专家,我需要一些帮助。我的主应用程序中有一个带有itemrenderer(mxml)的datagrid。在ir中按图像时,将打开一个自定义组件(mxml)。cc有一个按钮,用于调用主应用程序中的函数,该函数更新arraycollection(数据提供程序),从而更新datagrid。我尝试了parentDocument、outerDocument和自定义事件的几种变体,但我无法通过按钮使该函数工作。我想是b/c,我在ir中嵌套了cc。我直接从ir内部调用的任何东西都可以工作

有没有人有什么建议或者更好的工作示例可以让我看看

以下是我尝试过的:

//主要应用

public function creationComplete_handler(event:FlexEvent):void{
   dgList.addEventListener("ceRD", fnt_ceRD);
}
public function fnt_ceRD():void {
    Alert.show("called");
}


<mx:AdvancedDataGrid id="dgList" dataProvider="{acLists}" designViewDataType="flat">
   <mx:columns>
      <mx:AdvancedDataGridColumn headerText="Roster" sortable="false" itemRenderer="c_CO.AppLocal.ListManager.iRenderers.irADVStudents" />   </mx:columns>
</mx:AdvancedDataGrid>
在自定义组件中:

 <fx:Metadata>
        [Event("ceRD", true, false)]
    </fx:Metadata>

    <fx:Script>
        <![CDATA[
        import flash.events.Event;

            protected function btnSave(event:MouseEvent):void {

            var i_ceRD:Event = new Event("ceRD");
            dispatchEvent(i_ceRD);
            PopUpManager.removePopUp(this);

        }

        ]]>
    </fx:Script>

[事件(“消除种族歧视委员会”,对,错]

您遇到了问题,因为从花名册详细信息组件发送事件时,“ceRD”的侦听器被添加到数据网格中。DataGrid和RosterDetails之间没有关系

考虑将逻辑移动到ItemRenderer之外,以创建和显示
RosterDetails
。我建议让
irADVStudents
渲染器发送一个可以在主应用程序中处理的“imageClick”事件

内联呈现器有助于添加简单的事件处理:

<mx:AdvancedDataGrid dataProvider="{acLists}">
    <mx:columns>
        <mx:AdvancedDataGridColumn headerText="Roster" sortable="false">
            <mx:itemRenderer>
                <mx:Component>
                    <local:irADVStudents imageClick="outerDocument.onRoster(event)"/>
                </mx:Component>
            </mx:itemRenderer>
        </mx:AdvancedDataGridColumn>
    </mx:columns>
</mx:AdvancedDataGrid>

自定义事件可用于在应用程序中传递数据,例如从渲染器中单击了哪个项目。

请向我们展示您的尝试?在大多数情况下,我建议在渲染器中使用自定义事件[确保气泡属性设置为true];然后在DataGrid上为事件添加一个监听器[您可以在DataGrid的初始化事件中这样做]我接受了您的建议,删除了正式的mxml itemrenderer,只使用了一个直接的图像标记,其中单击事件处理程序通过outerDocument调用了一个函数。然后我添加了自定义组件,该组件现在由顶级应用程序拥有。这允许我在组件中添加自定义事件。宇宙又一切顺利了。谢谢你的建议和帮助!!!
<mx:AdvancedDataGrid dataProvider="{acLists}">
    <mx:columns>
        <mx:AdvancedDataGridColumn headerText="Roster" sortable="false">
            <mx:itemRenderer>
                <mx:Component>
                    <local:irADVStudents imageClick="outerDocument.onRoster(event)"/>
                </mx:Component>
            </mx:itemRenderer>
        </mx:AdvancedDataGridColumn>
    </mx:columns>
</mx:AdvancedDataGrid>
public function onRoster(event : Event) : void
{
    var rosterDetails : RosterDetails = new RosterDetails();
    rosterDetails.addEventListener("save", onSave);

    PopUpManager.addPopUp(rosterDetails, this, true);
    PopUpManager.centerPopUp(rosterDetails);
}

protected function onSave(event:Event):void
{
    Alert.show("SAVED");
}