flex属性被忽略

时间:2012-07-02 09:19:17

标签: flex twitter properties

我正在尝试让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的新手,到目前为止,我设法通过将代码从不同来源粘贴在一起来实现工作。所以,任何帮助将不胜感激。

1 个答案:

答案 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