Можно ли хранить массив в DataGridColumn во Flex? - PullRequest
0 голосов
/ 01 сентября 2009

У меня есть столбец таблицы данных с кнопкой, которая открывает модальное диалоговое окно, позволяющее пользователю загружать несколько файлов. В приведенном ниже коде это делает метод browseAndUpload (). Когда пользователь заканчивает загрузку файлов и закрывает окно загрузки, вызывается метод closeUpload (). Я точно знаю, что загруженные файлы копируются в arrFiles.

Проблема, с которой я столкнулся, заключается в том, что повторитель не будет показывать файлы в arrFiles. Вот код:

<mx:DataGridColumn id="dgcUpload" width="42" headerText="Uploaded Files"
    editable="false">
    <mx:itemRenderer>
        <mx:Component>
            <mx:VBox>
                <mx:Script>
                    <![CDATA[
                        [Bindable]public var arrFiles:ArrayCollection = new ArrayCollection();
                        public var fileUpload:FileUpload = new FileUpload();

                        private function browseAndUpload(event:MouseEvent):void
                        {
                            fileUpload = FileUpload(PopUpManager.createPopUp(this, FileUpload, true));

                            fileUpload.addEventListener(CloseEvent.CLOSE, closeUpload);
                            fileUpload["btnClose"].addEventListener("click", closeUpload);
                        }

                        private function closeUpload(event:Event):void
                        {
                            arrFiles = fileUpload.arrFiles;
                        }
                    ]]>
                </mx:Script>
                <mx:HBox paddingLeft="3" paddingRight="3">
                    <mx:Button width="36" label="..." click="browseAndUpload(event)"/>
                </mx:HBox>
                <mx:Repeater id="rpFiles" dataProvider="{arrFiles}">
                    <mx:Label text="{FileVO(rpFiles.currentItem).name}"/>
                </mx:Repeater>
            </mx:VBox>
        </mx:Component>
    </mx:itemRenderer>
</mx:DataGridColumn>

Заранее благодарим вас за понимание,

Орвилл

Ответы [ 2 ]

1 голос
/ 01 сентября 2009

Понял! Я сделал следующие изменения:

private function closeUpload(event:Event):void
{
    arrFiles = fileUpload.arrFiles;
    rpFiles.dataProvider = arrFiles;
}


<mx:Repeater id="rpFiles">
    <mx:Label text="{FileVO(rpFiles.currentItem).name}"/>
</mx:Repeater>
0 голосов
/ 01 сентября 2009
  • Вы присваиваете fileUpload.arrFiles непосредственно arrFiles. Является ли первый Array или ArrayCollection? Возможно, вам придется сделать arrFiles = new ArrayCollection(fileUpload.arrFiles);

При этом я ненавижу гибкое связывание и вообще избегаю его, потому что оно может быть ненадежным. В вашем случае я бы написал свой собственный компонент AS3, который реализует ItemRenderer, а затем вручную назначил поставщик данных репитера при его изменении. У вас будет больше контроля над поведением, если вы сделаете это таким образом. И намного легче отладить время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...