在flex中的ListItemRenderer中显示来自ArrayCollection的图像

时间:2014-07-18 10:06:18

标签: image actionscript-3 flex flex4 itemrenderer

我遇到以下问题, 我有一个名为“数据”的对象。它有三个属性,其中一个是itemRendererData。 “itemRendererData”是具有许多属性的对象的ArrayCollection,其中一个属性是属性“imageURL”(数据类型:字符串)。

我在flex工作。我已正确定义了视图和项目渲染器。视图包含数据。我应该从imageURL属性指定的url中获取图像。 在itemRenderer中,我声明了source

source = {data.itemRendererData.imageURL}

但图像没有显示。

1 个答案:

答案 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渲染器慢。