将参数发送到自定义ItemRenderer?

我想要完成的任务是让我的Flex数据网格中的财务数据进行颜色编码 - 如果它是正面的,则为绿色; 红色,如果它是负面的。 如果我想着色的列是dataProvider的一部分,这将是相当简单的。 相反,我正在计算它基于dataProvider的一部分的另外两列。 这仍然是相当直接的,因为我可以在ItemRenderer中再次计算它,但计算的另一部分是基于文本框的值。 所以,我认为我需要做的就是将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不存在)

那么有谁知道我会如何去完成这个?


您可能想从Flex APIs中查看ClassFactory:

这允许你设置一个任意类型/值的原型Object,每个类型/值将被传递给项目渲染器。 从样本:

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

上面的代码假定“ProductRenderer”具有一个名为“showProductImage”的公共属性,该值将设置为“true”。


啊,所以我知道outerDocument,但不知道parentDocument。 我能够使用parentDocument。*,无论我想从主应用程序中获得什么,只要它是公开的,我就可以访问它。

例:

setStyle("color", (parentDocument.availableFunding >= 0) ? POSITIVE_COLOR : NEGATIVE_COLOR);

甜! :)


如果需要,可以直接访问TextBox的值,方法是使用静态Application.application对象,该对象可在应用程序的任何位置访问。

例如,如果您希望在TextInput控件的值发生变化时通知呈示器,则可以这样做(从您的ItemRenderer中,以及myTextInput是在主MXML类中定义的控件的ID):

<mx:Script>
    <![CDATA[

        import mx.core.Application;

        private function creationCompleteHandler(event:Event):void
        {
            Application.application.myTextInput.addEventListener(TextEvent.TEXT_INPUT, handleTextInput, false, 0, true);
        }

        private function handleTextInput(event:TextEvent):void
        {
            if (event.currentTarget.text == "some special value")
            {
               // Take some action...
            }
        }

    ]]>
</mx:Script>

通过这种方法,当TextInput的text属性发生变化时,每个item-renderer对象都会得到通知,并且您可以根据当时的控件值采取适当的操作。 另外请注意,在这种情况下,我已将useWeakReference参数设置为true,以确保侦听器分配不会无意中干扰垃圾回收。 希望能帮助到你!

链接地址: http://www.djcxy.com/p/34625.html

上一篇: Sending a parameter to a custom ItemRenderer?

下一篇: flex prevent selection state on spark list