2010-09-23 24 views
1

我在itemRenderer中使用了List組件。主要的用戶交互涉及在一個渲染器中將列表中的項目拖放到另一個渲染器中。正在更新視圖spark.components.List

我的問題:當數據對象更新時,我希望根據數據對象傳遞給列表的數據提供者(dp)中的對象數來修改列表的高度。現在我試圖使List的顯示無效,刷新它的dp並嘗試在其他事件處理程序中放置此行assets.length > 0 ? assetList.percentHeight = 100 : assetList.height = 10;,例如dragdrop處理程序,dp的集合事件處理程序等。我也嘗試刷新List的dp使用此渲染器的組件。該視圖最終會得到更新,但只有當我調整列表的大小,或使用滾動條,或者當我開始拖動一個新的List項目,但從未放棄。

<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx" 
       autoDrawBackground="true" width="100%" creationComplete="init()" currentState="collapsed"> 

    <fx:Script> 
     <![CDATA[ 

      [Bindable] private var itemRenderer:ClassFactory; 
      [Bindable] private var colWidth:Number = 100; 
      [Bindable] private var assets:ArrayCollection = new ArrayCollection;; 

      public function init():void{ 

       itemRenderer = new ClassFactory(DefaultRenderer); 

        this.addEventListener(FlexEvent.DATA_CHANGE, onDataChange); 

      } 

      private function onDataChange(e:FlexEvent):void { 
       assets = data.assets; 
       trace(data.name, assets.length); 
       assets.length > 0 ? assetList.percentHeight = 100 : assetList.height = 10; 
      }    

     ]]> 
    </fx:Script> 

    <s:Group width="100%"> 
     <s:layout> 
      <s:VerticalLayout gap="0" /> 
     </s:layout> 

     <s:ToggleButton 
      id="viewToggle" 
      label="{data.name}" 
      width="100%" 
      height="50" 
      /> 

     <s:List id="assetList" 
       width="100%" 
       dataProvider="{assets}" 
       height = "10" 
       top="0" left="0" bottom="0" right="0" 
       dragEnabled="true" 
       allowMultipleSelection="true" 
       dragMoveEnabled="true" 
       dropEnabled="true" 
       itemRenderer="{itemRenderer}" 

       > 
      <s:layout> 
       <s:TileLayout requestedColumnCount="2" 
           horizontalGap="0" verticalGap="0" 
           columnWidth="{colWidth}" rowHeight="{colWidth}"/> 
      </s:layout> 
     </s:List> 
    </s:Group> 
</s:ItemRenderer> 

回答

0

在你onDataChange方法試試這個:

itemRenderer = null; 
itemRenderer = new ClassFactory(DefaultRenderer);