Обновление представления spark.components.List - PullRequest
1 голос
/ 23 сентября 2010

Я использую компонент 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>

1 Ответ

0 голосов
/ 20 октября 2010

В вашем методе onDataChange попробуйте это:

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