使用项目渲染器和自定义组件来自定义事件

好的Flex专家,我需要一些帮助。 我有一个数据网格在我的主应用程序中有一个itemrenderer(mxml)。 当您按下ir中的图像时,会打开一个自定义组件(mxml)。 cc有一个按钮应该在主应用程序中调用一个函数,该函数更新arraycollection(dataprovider)并因此更新数据网格。 我已经尝试了几种不同的parentDocument,outerDocument和自定义事件,但我无法从该按钮获取该功能。 我认为这是B / C我有嵌套在红外线的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>

在itemrenderer中,使用弹出窗口管理器,以便我可以集中在应用程序的顶部,而不是数据网格中的按钮

public function btnRoster(event:MouseEvent):void{
    var rShow:rosterDetails = new rosterDetails();
    PopUpManager.addPopUp(rShow, FlexGlobals.topLevelApplication.mainContent, true);
    PopUpManager.centerPopUp(rShow);
}

在自定义组件中:

 <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中。 DataGrid和RosterDetails之间没有关系。

考虑移动逻辑来创建并从RosterDetails显示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>

然后你可以简单地为你的'保存'事件添加一个监听器。 确保删除监听器,因为这是潜在的内存泄漏。 (弱听者也是一种选择)。

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

可以使用自定义事件来传递应用程序的数据,例如从渲染器中点击哪个项目。

链接地址: http://www.djcxy.com/p/34635.html

上一篇: flex custom event with item renderer and custom component

下一篇: Run a function when view state is change in Flex