将参数发送到自定义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,以确保侦听器分配不会无意中干扰垃圾回收。 希望能帮助到你!