Flex Hack 01: labelFunction的使用2011-04-10 BlogJava kissjava写过Swing的人都知道,如果使用List的组件或包含List组件如JComboBox,他们的item需 要显示几个字段的时候,需要做额外的动作,比如在List需要显示的对象添加一个toString方法便能组合显示出想要的效果,但是有时候一 个POJO或VO又不允许你添加这么一个方法。这个时候就需要在Renderer中利用反射的机制能 解决所需要的方法。但是在Flex中就能很方便的解决这样的问题,对于显示一个字段,只需要指定对应字段属 性给labelField即可,当需要上述所需要的功能的时候就得做个转换了,在Flex的基于List 的组件都有一个labelFunction方法能很简单指定所需要显示的内容。如有这么一个例子,有一个对象他包含一个name和age,现在需要一个ComboBox显示为: “name,age”,下面看例子代码:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
creationComplete="init()" backgroundColor="white">
<mx:Script>
<![CDATA[
[Bindable]
private var cbxDataProvider:Array;
private function init():void
{
cbxDataProvider = [
{name:"kissjava", age:"100"},
{name:"rocky", age:"88"},
{name:"jiang", age:"99"}
];
}
private function cbxDisplayFunction (data:Object):String
{
var label:String = "";
if(data.hasOwnProperty("name")){
label += data.name + ",";
}
if(data.hasOwnProperty("age")){
label += data.age;
}
return label;
}
]]>
</mx:Script>
<mx:Text id="text" x="30" y="30" text="这是labelFunction的测试例 子"/>
<mx:ComboBox id="cbx" labelFunction="cbxDisplayFunction"
dataProvider="{cbxDataProvider}" x="30" y="60"/>
</mx:Application>
测试结果图为:

这个labelFunction方法也可用于DataGrid中,如果有时候需要国际化之类的需求的时候 ,labelFunction也还是能派上用处的。