2010-12-02 3 views
2

次の問題が発生しています。Flexのitemrendererでツールチップが正しく更新されない問題

私はitemRendererには、TileListコントロールのitemRendererのようFavoriteItemと呼ばれる使用(favoriteLinksListと呼ばれる)TileListコントロールのデータプロバイダとして演技のArrayCollection

を持っています。

<?xml version="1.0" encoding="utf-8"?> 
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" 
width="280" height="163" 
horizontalAlign="center" 
paddingLeft="5" paddingRight="5" paddingTop="0" paddingBottom="0" xmlns:ns1="*"> 

<mx:Canvas width="100%" height="100%"> 
    <mx:Image 
    id="thumbnail" 
    width="178" height="115" 
    source="{data.thumbnail}" 
    toolTip = "{data.tooltip}" x="46" y="10"/> 

    <mx:Text 
    id="title" 
    text="{data.tileListTitle}" 
    width="254" 
    toolTip="{data.tooltip}" x="10" y="133"/> 
</mx:Canvas> 

</mx:VBox> 

あなたが見ることができるように、その内の2つの項目のツールヒントが

data.tooltipから取られている。これは、正常に動作します:このFavoriteItemは次のようになります。

問題が変更されたら、ツールチップを更新しています。

ArrayCollection内のオブジェクト(Object型)にはそれぞれtooltipというプロパティがあります(itemRendererがその情報を取得しているところです)。

このプロパティを新しい値に変更すると、itemRendererのツールチップに変更が反映されません。

タイルリスト内の項目の1つをクリックしても、成功しなかった場合にトリガされるイベントからitemRendererを取得することによって手動で設定しようとしました。

例:れるIListItemRenderer:静的型mx.controls.listClassesと参照による可能性が未定義のプロパティのタイトルの アクセス:ツールチップを更新しましたが、これはコンパイルエラーを与えた後

event.itemRenderer.title.toolTip = event.currentTarget.selectedItem.tooltip; 

favoriteLinksList配列コレクションでrefresh()を実行しようとしましたが、これは混在した結果をもたらしました。ツールチップが正しく更新されましたが、タイルリストの項目のうちの1つ(最初のもの)が欠落しました。これはFlexのバグのようです。データプロバイダには、リフレッシュの前後に同じ数の要素があります。タイルリストの最初の要素をクリックすると、データプロバイダはリフレッシュ前後に同じ数の要素を持ちます。

すべてのサポートをよろしくお願いいたします。

答えて

0

問題の解決方法を見つけました。

favoriteLinksListはバインド可能であり、tileListのdataProviderとして設定されます。ただし、個々のオブジェクトへの変更はitemRendererに伝播されていませんでした。

favoriteLinksList Array Collection自体に変更が必要だと思っていました。

私はすでにfavoriteLinksList.refresh()を使ってみましたが、これはtileListの最初の要素を消滅させました(まだArray Collection内にあるようですが)。おそらくFlexのバグは?

はとにかく、これを回避する方法は、以下を実行することを発見した:

favoriteLinksList.setItemAt(favoriteObject, favoriteLinksList.getItemIndex(favoriteObject)); 

基本的に、私はそうは実際に何もしていない自分自身に、インデックスXの項目を設定していますが、これはitemRendererのために十分ですitemRendererのデータを更新します。

0

私は2つのこと

オブジェクトが実際にバインド可能であることを
  1. をやって行くだろうとの変化が起こっおよびアイテムレンダラーになっ

  2. 可能な解決策=>データのためのセッターをオーバーライドしていますアイテムレンダラーでプロパティは、= super.dataを呼び出すことを忘れてはいけない値

-

override public function set data(value:Object):void 
{ 
super.data = value; 
title.toolTip = data.tooltip; 
} 

この行にブレークポイントがある場合は、データが変更されたときにそれにアクセスする必要があります。

+0

私が貼り付けたコードは何らかの理由で正しくフォーマッタしていませんでした。ここにコードへのリンクがあります:http://pastie.org/1341113 – KensoDev

+0

title.toolTip = data.tooltipの "nullオブジェクト参照のプロパティにアクセスできません"というメッセージが表示されるtitle.toolTip =値はまだありませんが、まだ喜んではいません:( favoriteLinksListは[Bindable]で、アプリケーション起動時の変更はタイルリストに正しく反映されます。 –

+0

favLinksListはバインド可能で、データをtileListに渡すと、個々のオブジェクトへの変更がタイルリストに伝播されていてはいけません。以下の解決策を見つけてください。 –

関連する問題