Я использую компонент List внутри itemRenderer.Основное взаимодействие с пользователем заключается в перетаскивании элемента из списка в одно средство визуализации и в другое.
Моя проблема: Когда объект данных обновляется, я хочу, чтобы высота списков изменялась в соответствии с количеством объектов в поставщике данных (dp), который передается в список из объекта данных.Теперь я попытался сделать недействительным отображение списка, обновить его dp и попытался поместить эту строку assets.length > 0 ? assetList.percentHeight = 100 : assetList.height = 10;
в другие обработчики событий, такие как обработчики перетаскивания, обработчики событий коллекции для 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>