我正在尝试让itemrenderer显示来自推文的文本,以及(如果有的话)上传的图像。文本显示正常,但无论我做什么,图像都不会显示。可能是因为我正在引用一个并不总是存在的属性,在这种情况下,“data.entities.media.creative.media_url”(只有在有推文上传的图像时才存在)才是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的新手,到目前为止,我设法通过将代码从不同来源粘贴在一起来实现工作。所以,任何帮助将不胜感激。
答案 0 :(得分:2)
我看到你绑定了一个深层嵌套的属性:data.entities.media.creative.media_url
。如果希望绑定正常工作,则必须确保该路径上的每个属性都是可绑定的。
具体地:
data
必须是ItemRenderer上的Bindable;默认情况下,当您扩展ItemRenderer
时,我会删除您的自定义Bindable声明和事件调度(甚至完全删除data
getter / setter覆盖)entities
属性声明为Bindable media
属性必须声明为Bindable media_url
属性然而,它不被认为是良好的编码实践(一般而言,不仅仅是在Flex中)来访问这样的深层嵌套属性,因此我建议您封装所需的属性,以便可以像这样绑定它:
<s:Image id="tweetImage" source="{data.media_url}" />
从“干净代码”的角度来看,这不仅会更好,而且如果列表中有很多项目,也会提高性能。 (因为绑定的数量会减少5倍)
另一种解决方案是不使用数据绑定,只需设置tweetImage
的{{1}}属性:
source