簡體   English   中英

帶有項目渲染器和自定義組件的flex自定義事件

[英]flex custom event with item renderer and custom component

好吧,Flex專家,我需要一些幫助。 我的主應用程序中有一個帶有itemrenderer(mxml)的數據網格。 在ir中按下圖像時,將打開一個自定義組件(mxml)。 cc有一個按鈕,該按鈕應該在主應用程序中調用一個函數,該函數更新arraycollection(數據提供程序),從而更新datagrid。 我嘗試了parentDocument,outerDocument和自定義事件的幾種變體,但無法從按鈕上使用該功能。 我認為這是b / c,我將cc嵌套在ir中。 我直接從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中,使用了popupmanager,這樣我就可以將應用程序放在頂部,而不是datagrid中的按鈕

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移出ItemRenderer。 我建議讓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");
}

自定義事件可用於在應用程序周圍傳遞數據,例如從渲染器中單擊了哪個項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM