0

次のフレックスシナリオで誰かが運が良かったかどうか疑問に思っていました。

内部の別のレンダラーに委任するカスタム アイテム レンダラーを使用できるようにしたいと考えています。

この理由は、たとえば、行のデータプロバイダーにブール値がある場合にチェックボックスを表示するデータグリッドにあります。値が非ブール値の場合、デフォルトのアイテム レンダラーを使用します。

基本的に、サブレンダラーにすべての責任を委譲するレンダラーができるように、プロキシ オブジェクト (必ずしもプロキシ クラスではありません) を使用したいと考えていました。

説明するのは難しい。

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



    }
}
4

1 に答える 1

2

Flex 4 Spark コンポーネントを使用している場合は、itemRendererFunction を調べてください。

これはインターウェブからの良いサンプルです。

残念ながら、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;

    }

}
于 2010-08-17T22:49:06.183 に答える