0

メイン アプリケーションに 3 つの列を持つデータグリッドがあります。3 番目の列では、内部に 2 つのコンポーネントを持つ hbox を使用するアイテム レンダラーを使用します。1 つはボタンで、もう 1 つはラベルです。メインアプリケーションにもスライダーがあります。データグリッドが使用されているスライダーを使用して、メイン アプリケーション ファイルから itemrenderer のボタンのアルファを変更したいと考えています。data プロパティを使用して、アイテム レンダラー内のデータ プロバイダー プロパティにアクセスできます。しかし、親アプリケーションのプロパティにアクセスするにはどうすればよいですか。このために、カスタム データグリッドを作成して、データ バインディングを使用してスライダーの値を渡しました。しかし、プロパティにアクセスできませんでした。同じことをしたリストでは、アイテムレンダラーのlistDataプロパティを使用してプロパティにアクセスできましたが、データグリッドの場合はアクセスできませんでした。

4

2 に答える 2

1

外部のプロパティにアクセスする場合は、itemRenderer の内部でouterDocumentを使用できます。次に例を示します。

//コード

        public var str:String = "Test";
        [Bindable] private var arr:Array = [
            {field:'ROW1'},
            {field:'ROW2'},
            {field:'ROW3'}                 
        ];

//MXML

<mx:DataGrid id="grid" width="100%" height="100%" dataProvider="{arr}">
    <mx:columns>
        <mx:DataGridColumn dataField="field">
            <mx:itemRenderer>
                <mx:Component>
                    <mx:Label text="{data.field + ' ' + outerDocument.str}"/>
                </mx:Component> 
            </mx:itemRenderer>
        </mx:DataGridColumn>
    </mx:columns>
</mx:DataGrid>  

このURL は、私が言ったことの良い例を示しています。お役に立てば幸いです。

于 2012-11-05T16:10:03.197 に答える
1

親アプリケーションのプロパティにアクセスする方法

一般的; しないことをお勧めします。itemRenderer は、データ要素を介して必要なすべてのプロパティにアクセスできる必要があります。これは dataProvider に関連しています。

表示階層の上位にあるコンポーネントのプロパティにアクセスするためのカプセル化の中断です。

とはいえ、これには多くの方法があります。

メイン アプリケーションにアクセスするには、 FlexGlobals.topLevelApplicationを使用して最上位アプリケーションにアクセスします。

スライダーの値を静的変数として保存し、itemRenderer からその方法でアクセスできます。

スライダーの値をデータ/モデル オブジェクトに保存し、依存性注入フレームワーク ( SwizRobotlegsなど) を使用して、そのデータ/モデル オブジェクトを itemRenderer に注入することができます。

于 2012-11-04T21:24:15.777 に答える