繁体   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