Apache flex 忽略flex属性

Apache flex 忽略flex属性,apache-flex,twitter,properties,Apache Flex,Twitter,Properties,我正在尝试使用itemrenderer来显示推文中的文本,以及(如果有)上传的图像。文本显示良好,但无论我做什么,图像都不会显示。是不是因为我引用的属性并不总是存在,在本例中是“data.entities.media.creative.media_url”(只有在tweet上传了图像时才存在),itemrenderer才会忽略所有tweet的属性 这是我的密码: [Bindable(event=“dataChange”)] 公共函数get data():对象 { 返回数据; } 公共功能集数据(

我正在尝试使用itemrenderer来显示推文中的文本,以及(如果有)上传的图像。文本显示良好,但无论我做什么,图像都不会显示。是不是因为我引用的属性并不总是存在,在本例中是“data.entities.media.creative.media_url”(只有在tweet上传了图像时才存在),itemrenderer才会忽略所有tweet的属性

这是我的密码:
[Bindable(event=“dataChange”)]
公共函数get data():对象
{
返回数据;
}
公共功能集数据(值:对象):无效
{
_数据=价值;
dispatchEvent(新事件(“数据变更”));
}   
]]>

我对Flex还很陌生,到目前为止,我通过将不同来源的代码粘贴在一起,成功地实现了工作。因此,任何帮助都将不胜感激。

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

具体地说:

  • 数据
    必须可在ItemRenderer上绑定;默认情况下,当您扩展
    itemrender
    时,它是默认的,因此我将删除您的自定义可绑定声明和事件分派(甚至删除
    数据
    getter/setter覆盖)
  • 数据实例的
    实体
    属性必须声明为可绑定
  • 实体实例的
    media
    属性必须声明为可绑定
  • 一直到
    media\u url
    属性
但是,这样访问深度嵌套的属性并不被认为是良好的编码实践(通常,不仅仅是在Flex中),因此我建议您封装所需的属性,以便可以像这样绑定到它:

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

谢谢你,特别感谢你努力教新手一些东西。不幸的是,它没有起作用。我无法更改属性的定义方式;这来自twitter的api。当我更改“data.users.profile\u image\u url”中的值时,会显示图像(每个tweet都有此属性),因此它不能是代码,它一定与属性链有关,或者不是所有tweet都有此属性。@user1482027我不知道Twitter API,但是我应该告诉你,绑定会吞下一些错误。这意味着,如果数据绑定中发生错误,您不会注意到;只是什么也不会显示。如果您尝试其他解决方案,但如果存在错误,则应抛出错误。你试过设置断点并检查
数据
实例中的实际内容吗?当我在网络监视器中查看返回的内容时,我可以看到结构,并且第一条tweet的属性链包含“data.entities.media.creative.media\u url”,因为有一个图像。其他推文没有“媒体url”的属性。当我尝试另一种方法时,我得到:错误#1069:在valueObjects.Entities上找不到属性媒体,并且没有默认值。我还没有设置断点;首先要弄清楚那是什么(我会这么做)。@user1482027你确定
实体
不是列表或数组吗?因为Flash告诉您,
实体
没有名为
媒体
的属性。因为这个名字是复数的,我会假设这是一个某种对象的集合,这正是我的问题;当应用程序运行时,它会收到20条推文,只有一条推文在“媒体url”中有图像。因此,对于其他19条推文,“…media.creative.media_url”不存在。够了,对于有图像的tweet,图像也不会显示出来。
<s:Image id="tweetImage" source="{data.media_url}" />
override public function set data(value:Object):void {
    super.data = value;
    tweetImage.source = data.entities.media.creative.media_url;
}