Flex:タイルリストの画像切り替え場所
-
06-07-2019 - |
質問
TileList内のitemRenderersで奇妙な問題に直面しています。
itemRendererを使用しない実際の例:152.org/flex /
これは、itemRendererを含む壊れたバージョンです:152.org/brokenExample/
(これらの両方をリンクにする担当者がいません)
両方の例には、「ソースを表示」があります。有効になっています。
問題を確認するには、壊れた例を使用して、アルバムを選択し、1行下にスクロールします。上にスクロールすると、画像が切り替わります。これを実際の例で試してみても大丈夫です。
これは広く知られているバグのようですが、解決策が見つかりません。
更新
私はこの例で再び遊び始め、何か他のものを見つけました。データセッターをオーバーライドする必要はありません。 itemRendererで、タイルを更新するたびに設定される新しいメソッドを作成できます。したがって、初期化メソッドまたはcreationCompleteメソッドに依存しないことが秘trickです。
これは、アプリケーション内のitemRendererについてのものです。
<itemRenderers:ImageTile img="{data}"/>
これはitemRendererにあるコードです。
public function set img(value:String) : void {
trace("setting source: " + value);
this.source = value;
this.name = value.toString().split("/").pop().split(".").shift();
}
解決
アプリが手元にないので、エンドツーエンドでテストすることはできませんが、ソースを確認しました。 itemRendererの data セッターをオーバーライドする必要がある可能性があります。
<?xml version="1.0" encoding="utf-8"?>
<mx:Image xmlns:mx="http://www.adobe.com/2006/mxml" initialize="init()">
<mx:Script>
<![CDATA[
override public function set data(value:Object):void
{
super.data = value;
this.source = data;
this.name = data.toString().split("/").pop().split(".").shift();
}
private function init() : void {
// Removed from your source and transplanted above
}
]]>
</mx:Script>
</mx:Image>
Flexは、リスト内のアイテムレンダラーの再利用を試みます(つまり、初期化、作成完了などのライフサイクルイベントが常に発生するわけではありません)。したがって、レンダラーを確認したい場合は、 (スクロールイベントが発生したときのように)データ項目が変更されると更新されます。ベストプラクティスは、レンダラーのデータプロパティをオーバーライドすることです。ほとんどの場合、問題が解決します。
他のヒント
creationCompleteで無効化を試みますか?
DataGrids(タイルリストに似た働きをする)で思い出したところ、アイテムが焦点を合わせられると、その再作成が行われます。
<mx:itemRenderer>
<mx:Image id="myImage" creationComplete="myImage.invalidate()" />
</mx:itemRenderer>
このコードを試したことはありませんが、これはあなたが探し始めたいところだと思います。 itemRendererコンポーネントを調べました。関数を呼び出すために、初期化の代わりにcreationCompleteを試してください