2009-04-24 15 views
0

私はカスタムItemRendererを持つTileListを持っていて、各項目は、dataProviderから受け取ったデータからextgractするイメージを表示します。奇妙なことは、私は、なぜ、いくつかのアイテムが、データボックにはないが別のアイテムデータにあるショーイメージであるということを知りません。自分のデータからイメージURLを抽出している場合、別のアイテムからイメージURLを取得する方法がわかりません。私は、ツールのヒントを使用してイメージのURLとアイテムのデータを表示し、URLがそのデータにないことを確認しました。ここでフレックス:リスト内の他のアイテムからデータを取り出すListItem?

は、私が使用しています一時XMLです:

<data> 

     <bs item_id="1"> 
      <variation price="300" month="JAN" stone="Garnet" image="<?=$img_dir?>jan.png" style="xsdfcSD" gold_color="Yellow" gold_carat="10"/> 
      <variation price="400" month="FEB" stone="Garnet" image="<?=$img_dir?>feb.png" style="xsdfcSD" gold_color="Yellow" gold_carat="10"/> 
      <variation price="550" month="MAR" stone="Garnet" image="<?=$img_dir?>march.png" style="xsdfcSD" gold_color="Yellow" gold_carat="10"/> 
      <variation price="625" month="APR" stone="Garnet" image="<?=$img_dir?>april.png" style="xsdfcSD" gold_color="Yellow" gold_carat="10"/> 
     </bs> 

     <bs item_id="2"> 
      <variation price="300" month="JAN" stone="Garnet" image="<?=$img_dir?>jan.png" style="xsdfcSD" gold_color="Yellow" gold_carat="10"/> 
      <variation price="400" month="FEB" stone="Garnet" image="<?=$img_dir?>feb.png" style="xsdfcSD" gold_color="Yellow" gold_carat="10"/> 
      <variation price="550" month="MAR" stone="Garnet" image="<?=$img_dir?>march.png" style="xsdfcSD" gold_color="Yellow" gold_carat="10"/> 
      <variation price="625" month="APR" stone="Garnet" image="<?=$img_dir?>april.png" style="xsdfcSD" gold_color="Yellow" gold_carat="10"/> 
     </bs> 

     <bs item_id="3"> 
      <variation price="300" month="JAN" stone="Garnet" image="<?=$img_dir?>jan.png" style="xsdfcSD" gold_color="Yellow" gold_carat="10"/> 
      <variation price="400" month="FEB" stone="Garnet" image="<?=$img_dir?>feb.png" style="xsdfcSD" gold_color="Yellow" gold_carat="10"/> 
      <variation price="550" month="MAR" stone="Garnet" image="<?=$img_dir?>march.png" style="xsdfcSD" gold_color="Yellow" gold_carat="10"/> 
      <variation price="625" month="APR" stone="Garnet" image="<?=$img_dir?>april.png" style="xsdfcSD" gold_color="Yellow" gold_carat="10"/> 
     </bs> 

     <bs item_id="4"> 
      <variation price="300" month="JAN" stone="Garnet" image="<?=$img_dir?>PE105-BT.png" style="xsdfcSD" gold_color="Yellow" gold_carat="10"/> 
      <variation price="400" month="FEB" stone="Garnet" image="<?=$img_dir?>PE105-EM.png" style="xsdfcSD" gold_color="Yellow" gold_carat="10"/> 
      <variation price="550" month="MAR" stone="Garnet" image="<?=$img_dir?>PE105-OP.png" style="xsdfcSD" gold_color="Yellow" gold_carat="10"/> 
      <variation price="625" month="APR" stone="Garnet" image="<?=$img_dir?>PE105.png" style="xsdfcSD" gold_color="Yellow" gold_carat="10"/> 
     </bs> 


</data> 

各項目は< BS>ブロックを取得します。

<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="150" height="150" xmlns:local="*"> 

    <mx:Script> 
     <![CDATA[ 
      import mx.controls.Alert; 

      private var _randomIndex:uint; 
      private var _indexSet:Boolean; 

      private function getRandomImage():String 
      { 
       if (!_indexSet) 
       { 
        var maxIndex:uint = data.children().length(); 
        _randomIndex = Math.floor(Math.random()*maxIndex); 
        _indexSet = true; 
       } 
       return data.children()[_randomIndex][email protected]; 
      } 

     ]]> 
    </mx:Script> 


    <local:LoadingImage id="tn" toolTip="{tn.source+'\n\n'+data}" source="{getRandomImage()}" width="150" height="150"/> 

</mx:Canvas> 

2番目と3番目にのみ第4ブロック内にある画像を示している:(4つの項目)ここで

とItemRenderからのコードです。

誰も私が見ていないことを見ていますか?

ありがとうございます!

答えて

0

私は、このgetRandomImage(data)のような関数に "data"を渡すと、問題を解決することが分かりました。しかし、なぜ100%確かに。

+0

バインディングの変更が検出されないためです。参照: http://stackoverflow.com/questions/445313/can-i-bind-a-flex-component-property-to-a-function – an0nym0usc0ward

1

Itemrenderersはリサイクルされているので、set data()で何らかの処理を行うと、常にif/else文が一致する必要があります。 itemrender内のメンバー変数が「既知」の状態にあると想定することはできません。あなたのコードでは、indexSetが正しく初期化されていない+ if文にelseが存在しないようです。

+0

あなたの応答に感謝、私は一時的にif()文を取り出し、常に1になるようにindexSetを設定しました。それは常に各ブロックの最初の画像URLである< variation >です。静止アイテム2は、それ自体の画像からアイテム4の画像に前後にジャンプする。これは、このようにTileListを使用した4回目の私の時間です。 –

0

getRandomImageはいつ呼び出されますか? ItemRendererは再利用されるため、古いイメージが添付されている可能性があります。新しい値でリロードしないと、同じイメージが残っています。おそらく、あなたはdataChangedイベントのオーバーロードを試みることができますか?私はあなたの_indexSetがおそらく上記のようにあなたが望むように動作していないことにも気付いていますが、それはあなたの主な問題ではありません。

+0

各ブロック内に異なるバリエーション画像があるため、一度ランダムな画像を選択したいのですが、一度再描画しても同じ画像を表示し続けると、indexSetもリサイクルされますか?私はまだ混乱している。 –

+2

itemRendererの状態は、データが設定されているときは不明なので、indexSetはデータにリンクされていてitemRendererにはリンクされていない必要があります(indexSetはtrueまたはfalseです。知る方法)。 – CookieOfFortune

関連する問題