Переключатель элементов рендера Flex - PullRequest
0 голосов
/ 18 августа 2010

Мне было интересно, если кому-нибудь повезло со следующим senario в flex.

Я бы хотел иметь возможность настраивать средство визуализации пользовательских элементов, которое делегирует другому визуализатору внутри.

Причина этого может заключаться в том, что в таблице данных, например, отображается флажок, если поставщик данных для строки имеет логическое значение.Использование средства визуализации элементов по умолчанию, когда значение не является логическим.

В основном я надеялся использовать прокси-объект (хотя и не обязательно прокси-класс), чтобы я мог использовать средство рендеринга, которое делегировало все свои обязанностиsub renderer.

Трудно объяснить.

Edit 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;
        }



    }
}

1 Ответ

2 голосов
/ 18 августа 2010

Если вы используете искровые компоненты Flex 4, посмотрите на itemRendererFunction,

Вот хороший образец из паутины.

К сожалению, компоненты Flex 3,такие как DataGrid, не поддерживают это.

Вы немного расплывчаты в том, что бы вы отображали, если бы данные, отправленные в itemRenderer, не были логическим значением.Но вы можете легко изменить внешний вид компонента на основе события изменения данных, в том числе поменять видимые свойства дочерних компонентов, изменить состояния или изменить selectedIndex ViewStack.Все эти вещи могут быть выполнены в itemRenderer без проблем.


Редактировать:

Исходя из дополнительных сообщений пользователя, я бы добавил, что то, что ему нужно, можно сделать так:

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

    }

}
...