0

我正在尝试让 itemrenderer 显示推文中的文本,以及(如果有的话)上传的图像。文本显示正常,但无论我做什么,图像都不会显示。难道是因为我指的是一个并不总是存在的属性,在这种情况下,itemrenderer 只是忽略所有推文的属性?

这是我的代码:

        [Bindable(event="dataChange")]
        public function get data():Object
        {
            return _data;
        }
        public function set data(value:Object):void
        {
            _data = value;
            dispatchEvent(new Event("dataChange"));
            }   
    ]]>
</fx:Script>


<s:Label text="{data.text}"
         width="100%"
         styleName="tweetlist"/>
<s:Image id="tweetImage" source="{data.entities.media.creative.media_url}"/>

我对 Flex 很陌生,到目前为止,我设法通过将来自不同来源的代码粘贴在一起来使事情正常进行。因此,任何帮助将不胜感激。

4

1 回答 1

2

我看到您正在绑定到一个深度嵌套的属性:data.entities.media.creative.media_url. 如果您希望绑定正常工作,则必须确保该路径上的每个属性都设置为可绑定。

具体来说:

  • data必须在 ItemRenderer 上可绑定;默认情况下,当您扩展时ItemRenderer,我将删除您的自定义 Bindable 声明和事件调度(甚至data完全删除 getter/setter 覆盖)
  • 数据实例的entities属性必须声明为 Bindable
  • 实体实例的media属性必须声明为 Bindable
  • 以此类推一直到media_url物业

但是,访问这样的深层嵌套属性并不被认为是良好的编码实践(通常,不仅仅是在 Flex 中),所以我建议您封装您需要的属性,以便您可以像这样绑定到它:

<s:Image id="tweetImage" source="{data.media_url}" />

从“干净代码”的角度来看,这不仅会更好,而且如果列表中有很多项目,也会提高性能。(因为绑定的数量将减少 5 倍)

另一种解决方案是不使用数据绑定并简单地设置tweetImagesource属性:

override public function set data(value:Object):void {
    super.data = value;
    tweetImage.source = data.entities.media.creative.media_url;
}
于 2012-07-02T11:13:18.930 回答