/ / Чи можна зберегти масив у DataGridColumn у Flex? - flex, actionscript-3

Чи можна зберігати масив у DataGridColumn у Flex? - flex, actionscript-3

У мене є стовпець сітки даних із кнопкою, яка відкриваєтьсямодальне діалогове вікно, що дозволяє користувачеві завантажувати кілька файлів. У наведеному нижче коді це робить метод 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>

Дякую заздалегідь за будь-яке розуміння,

Орвілл

Відповіді:

1 для відповіді № 1

Зрозумів! Я вніс такі зміни:

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 для відповіді № 2
  • Ви призначаєте fileUpload.arrFiles прямо до arrFiles. Перший - це Array або ArrayCollection? Можливо, вам доведеться це зробити arrFiles = new ArrayCollection(fileUpload.arrFiles);

Тим не менш, я ненавиджу гнучке прив'язку іяк правило, уникайте цього, оскільки він може бути ненадійним. У вашому випадку я б написав власний компонент AS3, який реалізує ItemRenderer, а потім вручну призначав постачальник даних ретранслятора, коли він змінюється. Ви будете мати більше контролю над поведінкою, якщо будете робити це так. І набагато простіший час налагодження.