2013-08-23 52 views
0

使用Flex 4.10和一個火花列表使用IconItemRenderer -IconItemRenderer:如何僅顯示一些List項目的裝飾器?

是否可以顯示裝飾圖像僅用於某些列表項目?

我代表球員每週頂級評級列表,不知如何顯示唯一的勝利者獎牌:

enter image description here

<fx:Declarations> 
    <s:MultiDPIBitmapSource id="MEDAL" 
     source160dpi="@Embed('assets/icons/160/medal-gold.png')" 
     source240dpi="@Embed('assets/icons/240/medal-gold.png')" 
     source320dpi="@Embed('assets/icons/320/medal-gold.png')" 
     source480dpi="@Embed('assets/icons/480/medal-gold.png')" /> 

    <s:ArrayCollection id="_ac" /> 
</fx:Declarations> 


<s:List id="_list" 
     width="100%" 
     height="100%" 
     dataProvider="{_ac}" 
     change="handleChange(event)"> 
    <s:itemRenderer> 
     <fx:Component> 
      <s:IconItemRenderer 
       iconField="avatar" 
       messageField="city" 
       decorator="{outerDocument.MEDAL}" 
       iconFunction="{outerDocument.iconFunc}" 
       labelFunction="{outerDocument.labelFunc}" /> 
     </fx:Component> 
    </s:itemRenderer> 
</s:List> 

回答

1

簡短的回答是設置裝飾爲NULL您的數據更改功能。

較長的答案:

<s:IconItemRenderer 
       iconField="avatar" 
       messageField="city" 
       decorator="{outerDocument.MEDAL}" 
       iconFunction="{outerDocument.iconFunc}" 
       labelFunction="{outerDocument.labelFunc}"     
       dataChange="onDataChange(event)" > 
    <fx:Script> 
     <![CDATA[ 

      import mx.events.FlexEvent; 

      public var statManager :StatManager = StatManager.instance;  

      protected function onDataChange(event:FlexEvent):void 
      { 
       if(SomeConditionThatDeterminesThatDecoratorShouldBeDisplayed){ 
        this.decorator = outerDocument.MEDAL; 
       } else { 
        this.decorator = null; 
       } 
      } 

     ]]> 
    </fx:Script> 

</s:IconItemRenderer> 

我用我的手機遊戲同樣的方法。

+1

好的,謝謝!我在'set data'方法中嘗試了相同的代碼,它也可以工作,想知道這個代碼更好的地方在哪裏? –

+1

我總是喜歡在dataChange事件上使用處理程序。但是,我沒有任何爭論,這是更好的。使用dataChange或設置數據並不真正自動。如果你想獲得「特定組件生命週期」,那麼設置的數據應該調用invalidateDisplayList(),UI更改應該在updateDisplayList函數中完成。除非你專注於可擴展/可重用組件,這可能是過度的。 – JeffryHouser