我有一个带有按钮的datagrid列,该按钮可以打开一个模式对话框,允许用户上传多个文件。在下面的代码中,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>
提前感谢您的任何见解,
奥维尔
答案 0 :(得分: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>
答案 1 :(得分:0)
fileUpload.arrFiles
直接分配给arrFiles
。前者是Array还是ArrayCollection?您可能需要执行arrFiles = new ArrayCollection(fileUpload.arrFiles);
话虽这么说,我讨厌flex绑定并且通常会避免它,因为它可能不可靠。在您的情况下,我会编写自己的AS3组件来实现ItemRenderer,然后在更改时手动分配转发器的dataprovider。如果你这样做,你将有更多的控制行为。并且更容易调试。