簡體   English   中英

彈性開關項目渲染器

[英]Flex switch item-renderer

我想知道是否有人對以下Senario感到幸運。

我希望能夠有一個自定義項目渲染器,該渲染器將委托給另一個渲染器。

這樣做的原因是在數據網格中,例如,如果該行的數據提供者具有布爾值,則顯示一個復選框。 當值是非布爾值時,使用默認項目渲染器。

基本上,我希望使用代理對象(盡管不一定是代理類),以便我可以將其所有職責委托給子渲染器的渲染器。

難以解釋。

編輯1

我認為以下內容可以更清楚地了解我的想法。 這只是為了展示這個想法而迅速提出來。

SwitchingRenderer.as

package com.example
{
    import mx.controls.CheckBox;
    import mx.controls.dataGridClasses.DataGridItemRenderer;
    import mx.controls.listClasses.BaseListData;
    import mx.controls.listClasses.IDropInListItemRenderer;
    import mx.core.IDataRenderer;
    import mx.core.UIComponent;

    public class SwitchingRenderer extends UIComponent implements IDataRenderer, IDropInListItemRenderer
    {
        private var checkboxRenderer:CheckBox;
        private var defaultRenderer:DataGridItemRenderer;
        private var currentRenderer:IDataRenderer;
        public function SwitchingRenderer()
        {
            this.checkboxRenderer = new CheckBox();
            this.defaultRenderer = new DataGridItemRenderer();
            this.currentRenderer = defaultRenderer();
            super();
        }

        public function get data():Object
        {
            //If the data for this cell is a boolean 
            //  currentRender = checkBoxRenderer
            // otherwise 
            //  currentRenderer = defaultRenderer
        }

        public function set data(value:Object):void
        {
            currentRenderer.data = value;
        }

        public function get listData():BaseListData
        {
            return currentRenderer.listData;
        }

        public function set listData(value:BaseListData):void
        {
            currentRenderer.listData = value;
        }



    }
}

如果您使用的是Flex 4 Spark組件,請查看itemRendererFunction,

這是來自互連網的一個很好的示例

不幸的是,Flex 3組件(例如DataGrid)不支持該組件。

如果發送到itemRenderer中的數據不是布爾值,則對於要顯示的內容有點不確定。 但是,您可以根據數據更改事件輕松地修改組件的外觀,包括交換組件子項的可見屬性,更改狀態或更改ViewStack的selectedIndex。 所有這些事情都可以在沒有問題的itemRenderer中完成。


編輯:

基於用戶的其他發布,我要補充一點,他可以執行的操作如下:

public function get data():Object
{
    if(this.data is Boolean){
       checkBoxRenderer.visible = true;
       defaultRenderer.visible = false;
    } else {
       checkBoxRenderer.visible = false;
       defaultRenderer.visible = true;

    }

}

暫無
暫無

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

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