2010-09-23 2 views
1

Я использую компонент List внутри itemRenderer. Основное взаимодействие с пользователем включает в себя перетаскивание элемента из списка в один визуализатор и перенос его в другой.Обновление зрения spark.components.List

Моя проблема: при обновлении объекта данных я хочу, чтобы высота списков изменялась в соответствии с количеством объектов в dataprovider (dp), которое передается в List из объекта данных. Теперь я попытался аннулировать отображение списка, обновить его dp и попытался поместить эту строку assets.length > 0 ? assetList.percentHeight = 100 : assetList.height = 10; в другие обработчики событий, такие как обработчики dragdrop, обработчики событий коллекции для dp и т. Д. Я также попытался обновить dp для списка компонент, который использует этот рендерер. В конечном итоге представление будет обновляться, но только если я изменил размер списка или воспользуюсь скроллером, или когда я начну перетаскивать новый элемент списка, но никогда после его удаления.

<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);