2010-09-23 76 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);