23

Flex Datagrid で財務データを色分けするために達成しようとしていること - 正の場合は緑。マイナスなら赤。色を付けたい列が dataProvider の一部である場合、これはかなり簡単です。代わりに、dataProvider の一部である他の 2 つの列に基づいて計算しています。ItemRenderer で再度計算できるので、これはかなり簡単ですが、計算の別の部分は textBox の値に基づいています。したがって、私ができる必要があると思うのは、textBox の値をカスタム ItemRenderer に送信することですが、その値はメインの MXML アプリケーションに格納されているため、アクセスする方法がわかりません。パラメータとして送信するのが最善の方法のように思えますが、おそらく別の方法があります。

これが私の ItemRenderer の現在のコードです。

package {
import mx.controls.Label;
import mx.controls.listClasses.*;

public class PriceLabel extends Label {
    private const POSITIVE_COLOR:uint = 0x458B00 // Green
    private const NEGATIVE_COLOR:uint = 0xFF0000; // Red 

    override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
        super.updateDisplayList(unscaledWidth, unscaledHeight);

        /* Set the font color based on the item price. */
        setStyle("color", (data.AvailableFunding >= 0) ? NEGATIVE_COLOR : POSITIVE_COLOR);
    }
}

(data.AvailableFunding は存在しません)

それで、私がこれを達成する方法を知っている人はいますか?

4

10 に答える 10

35

Flex API からClassFactoryを調べることができます。

これにより、アイテム レンダラーに渡される任意の型/値を持つプロトタイプ オブジェクトを設定できます。サンプルから:

var productRenderer:ClassFactory = new ClassFactory(ProductRenderer);
productRenderer.properties = { showProductImage: true };
myList.itemRenderer = productRenderer;

上記のコードは、"ProductRenderer" に "true" の値が設定される "showProductImage" というパブリック プロパティがあることを前提としています。

于 2009-02-09T17:20:11.213 に答える
0

私はcliff.meyersの答えに投票します。

これは、ItemRendererクラスの周りにClassFactoryをラップし、必要なプロパティを挿入する関数を構築することにより、MXMLからitemRendererのプロパティを設定する別の例です。

静的関数:

public static function createRendererWithProperties(renderer:Class,
properties:Object ):IFactory {
  var factory:ClassFactory = new ClassFactory(renderer); 
  factory.properties = properties;
  return factory;
}

リスト内の各アイテムにツールチップを追加する簡単な例:

<mx:List dataProvider="{['Foo', 'Bar']}" itemRenderer="{createRendererWithProperties(Label, {toolTip: 'Hello'})}"/>

参照:
http ://cookbooks.adobe.com/post_Setting_the_properties_of_an_itemRenderer_from_MXM-5762.html

于 2012-08-03T09:30:37.470 に答える
0

ここに示すように、データプロバイダーが変更されたときにレンダラーを変更するために、アイテムレンダラーのセットデータ関数をオーバーライドするのが好きです。

関数をオーバーライドすると、オブジェクトをオブジェクトにキャストして、availableFundingプロパティを使用可能にすることができます。

テキストボックスにアクセスするには、パブリックプロパティを作成し、そのプロパティをmxmlファイルのテキストボックスにバインドしてみます。

public var textVar:String;

            <mx:itemRenderer>
                <mx:Component>
                    <customrenderer textVar="{txtBox.text}" />
                </mx:Component>
            </mx:itemRenderer>
于 2009-02-09T22:25:11.230 に答える
0

もう 1 つのテクニックがあります。最初は少しハッキリしているように見えますが、実際に使用すると、おそらくそれほど面倒ではなく、よりクリーンになります。

これには、イベント ディスパッチがもちろん同期的であり、イベント オブジェクトが、任意のイベント ハンドラーによって設定された値オブジェクトとして扱われるという、あまり注目されていない事実が含まれます。

つまり、ItemRenderer は次のようなことができます。

  ...
  var questionEvt:DynamicEvent = new DynamicEvent('answerMeThis', true, true);
  if (dispatchEvent(questionEvt))
  {
      if (questionEvent.answer == "some value")
      ....

イベントにリスナーを持ち、次のようなことを行うレンダラーの上のビュー階層のどこかに対応するハンドラーを使用します。

function handleAnswerMeThis(event:DynamicEvent):void
{
     event.answer = "another value";
     event.dataHelper = new DataHelperThingy();
}

それは DynamicEvent である必要はありません - 私は怠惰な説明のためにそれを使用しているだけです。

于 2012-02-15T17:59:49.147 に答える
0

プロパティを使用しouterDocumentます。参照してfx:Componentください

于 2012-09-08T11:10:45.300 に答える
0

次の例を参照してください。

itemRenderer="{UIUtils.createRenderer(TextBox,{iconSrc:IconRepository.linechart,headerColor:0xB7D034,subHeaderColor:0xE3007F,textColor:0x75757D})}"
                                   
于 2015-12-02T16:41:11.250 に答える
0

素敵な ClassFactory の例はこちら

于 2010-01-05T05:01:57.120 に答える
0

ItemRenderer で「AvailableFunding」静的変数を作成し、それを親ドキュメントに設定できます。

public class PriceLabel extends Label {
    public static var availableFunding:int;
    ...
    ...
    SetStyle("color", (PriceLabel.availableFunding >= 0) ? NEGATIVE_COLOR : POSITIVE_COLOR);
}

親ドキュメントで、テキスト ボックスが更新されたときに設定します

PriceLabel.availableFunding = textBox.text;

明らかに、すべての ItemRenderer で同じ値になりますが、とにかくそれがあなたがしていることのようです。

于 2013-01-06T05:38:00.803 に答える