我在itemRenderer中使用List组件。主要用户交互涉及在一个渲染器中从List中拖动一个项目并将其放入另一个渲染器中。
我的问题:当数据对象更新时,我希望根据数据提供者(dp)中的对象数量修改列表的高度,该对象从数据对象传递给List。现在我试图使List的显示无效,刷新它的dp并尝试将此行assets.length > 0 ? assetList.percentHeight = 100 : assetList.height = 10;
放在其他事件处理程序中,例如dragdrop处理程序,dp的集合事件处理程序等。我也尝试刷新dp用于使用此渲染器的List组件。视图最终会更新,但前提是我调整列表大小,或者使用滚动条,或者当我开始拖动新的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 :(得分:0)
在你的onDataChange方法中试试这个:
itemRenderer = null;
itemRenderer = new ClassFactory(DefaultRenderer);