次のフレックスシナリオで誰かが運が良かったかどうか疑問に思っていました。
内部の別のレンダラーに委任するカスタム アイテム レンダラーを使用できるようにしたいと考えています。
この理由は、たとえば、行のデータプロバイダーにブール値がある場合にチェックボックスを表示するデータグリッドにあります。値が非ブール値の場合、デフォルトのアイテム レンダラーを使用します。
基本的に、サブレンダラーにすべての責任を委譲するレンダラーができるように、プロキシ オブジェクト (必ずしもプロキシ クラスではありません) を使用したいと考えていました。
説明するのは難しい。
編集 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;
}
}
}