我遇到以下问题, 我有一个名为“数据”的对象。它有三个属性,其中一个是itemRendererData。 “itemRendererData”是具有许多属性的对象的ArrayCollection,其中一个属性是属性“imageURL”(数据类型:字符串)。
我在flex工作。我已正确定义了视图和项目渲染器。视图包含数据。我应该从imageURL属性指定的url中获取图像。 在itemRenderer中,我声明了source
source = {data.itemRendererData.imageURL}
但图像没有显示。
答案 0 :(得分:2)
使用FlexEvent.DATA_CHANGE
处理程序而不是绑定,这实际上是处理此问题的正确方法,并为您提供更多控制权。
public function CustomItemRenderer() {
this.addEventListener(FlexEvent.DATA_CHANGE, this.dataChangeHandler);
this.addEventListener(FlexEvent.CREATION_COMPLETE, this.creationCompleteHandler);
}
private function creationCompleteHandler(e:FlexEvent) {
if (this.data) {
this.image.source = this.data.itemRendererData.imageURL;
}
}
private function dataChangeHandler(e:FlexEvent) {
if (this.data && this.initialized) {
this.image.source = this.data.itemRendererData.imageURL;
}
}
您会注意到我也有FlexEvent.CREATION_COMPLETE
的处理程序。这是因为数据实际上是在创建组件之前设置的。因此,第一次加载渲染器时,this.image
为空,this.image.source
将出错。
如果这不起作用,您还需要确保Image
/ BitmapImage
不是渲染器的直接子节点。我从来没有弄清楚为什么会这样,但是将其添加为Group
的孩子,解决了图像设置但不渲染的问题。再一次,我不知道为什么会这样,我试了几个小时试图解决它。
作为补充提示,请避免在移动应用程序中使用基于MXML的ItemRenderer。它们明显比纯AS3渲染器慢。