0

ツイートからのテキストと、(存在する場合) アップロードされた画像を表示する itemrenderer を取得しようとしています。テキストは問題なく表示されますが、何をしても画像が表示されません。常に存在するとは限らないプロパティ、この場合は「data.entities.media.creative.media_url」(ツイートでアップロードされた画像がある場合にのみ存在する) を参照しているためでしょうか。すべてのツイートのプロパティを無視しますか?

これが私のコードです:

        [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。バインディングを適切に機能させるには、そのパス上のすべてのプロパティがバインド可能になっていることを確認する必要があります。

具体的には:

  • dataItemRenderer でバインド可能である必要があります。を拡張するときはデフォルトItemRendererであるため、カスタムの Bindable 宣言とイベントのディスパッチを削除します (またはdataゲッター/セッターのオーバーライドを完全に削除します) 。
  • データ インスタンスのentitiesプロパティは Bindable と宣言する必要があります
  • エンティティ インスタンスのmediaプロパティは Bindable と宣言する必要があります
  • media_urlなどなど、物件までずっと

ただし、そのように深くネストされたプロパティにアクセスすることは (一般的に、Flex に限らず) 良いコーディング プラクティスとは見なされないため、必要なプロパティをカプセル化して、次のようにバインドできるようにすることをお勧めします。

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

これは、「クリーン コード」の観点からだけでなく、リストに多くの項目がある場合のパフォーマンスも向上します。(バインディングの数が 5 分の 1 に減少するため)

別の解決策は、データ バインディングを使用せず、単に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 に答える