所有,我有一个Datagrid与一个ItemRenderer分配给一个货币列(字符串)的列。渲染器意味着显示货币的标志,例如;对于美元,它应该显示USD标志图像等。此时该列出现空白而没有图像。我有以下渲染器(它扩展了UIComponent)。我在commitProperties()方法中动态加载图像。目前我已经对美元形象进行了硬编码,以使其起作用 - 但没有运气。任何帮助将大大appreaciated。Flex DataGrid Itemrenderer图像不能显示
public class CenteredEmbedImage extends UIComponent implements IListItemRenderer,IDropInListItemRenderer
{
private var _loader:Loader;
private var _img:Image;
public function CenteredEmbedImage()
{
super();
}
private var _data:Object;
[Bindable("dataChange")]
[Inspectable(environment="none")]
public function get data():Object
{
return _data;
}
public function set data(value:Object):void
{
var newText:*;
_data = value;
invalidateProperties();
dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
}
private var _listData:BaseListData;
[Bindable("dataChange")]
[Inspectable(environment="none")]
public function get listData():BaseListData
{
return _listData;
}
public function set listData(value:BaseListData):void
{
_listData = value;
}
override protected function commitProperties():void
{
super.commitProperties();
if (listData)
{
// remove the old child if we have one
if (_img)
removeChild(_img);
_img= new Image();
//source code of the second way
_loader = new Loader();
//notice: NOT _loader.addEventListener,is _loader.contentLoaderInfo.addEventListener
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE,function(e:Event):void{_img.source = e.currentTarget.content;});
_loader.load(new URLRequest(encodeURI("assets/images/flags/usd.gif")));
addChild(_img);
}
}
override protected function measure():void
{
super.measure();
if (_img)
{
measuredHeight = _img.height;
measuredWidth = _img.width;
}
}
override protected function updateDisplayList(w:Number, h:Number):void
{
super.updateDisplayList(w, h);
if (_img)
{
_img.x = (w - _img.width)/2;
}
}
}
}
嗨Flextras,感谢您的宝贵帮助!两种方法都奏效。它是我第一次创建自己的UIComponent,所以这就是为什么有很多错误。我更喜欢扩展UIComponent,因为我也可以在图像旁边添加一些文本 - 不确定你可以用一个普通的Image对象来做到这一点。再一次,你的帮助很受欢迎。问候迈克。 – Michael 2010-12-23 10:21:08