2010-08-17 4 views
0

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

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

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

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

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

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



    } 
} 

ответ

2

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

Вот good sample из межсетях.

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

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


Edit:

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

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

    } 

} 
+0

Я надеюсь, что я разъяснены мой вопрос несколько , – Wes

+1

Я отредактировал свой ответ соответственно, однако я укажу, что у вашего оригинального сообщения нет вопросов. У вас есть проблема с попыткой реализовать это? Вы уже определили алгоритмическую логику в своем вопросе. – JeffryHouser

+0

Да, я подумал об этом раньше. Я понимаю, что мой вопрос был другим. Это полезный ответ, но да, я пытаюсь понять, будет ли работать этот метод. – Wes

Смежные вопросы