【问题标题】:Flex switch item-renderer弹性开关项目渲染器
【发布时间】:2010-08-17 21:58:12
【问题描述】:

我想知道是否有人对 flex 中的以下 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;
        }



    }
}

【问题讨论】:

    标签: apache-flex proxy decorator itemrenderer


    【解决方案1】:

    如果您使用的是 Flex 4 spark 组件,请查看 itemRendererFunction,

    这是来自互联网的good sample

    很遗憾,DataGrid 等 Flex 3 组件不支持该功能。

    如果发送到 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;
    
        }
    
    }
    

    【讨论】:

    • 我希望我已经稍微澄清了我的问题。
    • 我已经相应地编辑了我的答案,但是我会指出你的原始帖子没有问题。您在尝试实施此操作时遇到问题吗?您已经在问题中定义了算法逻辑。
    • 是的,我之前考虑过。我知道我的问题有所不同。这是一个有用的答案,但是是的,我正在尝试查看该方法是否可行。
    猜你喜欢
    • 2017-08-01
    • 2021-04-16
    • 2011-04-12
    • 2020-09-17
    • 2011-03-09
    • 2021-03-27
    • 2018-09-13
    • 1970-01-01
    • 2021-11-01
    相关资源
    最近更新 更多