【问题标题】:Is it possible to store an array in a DataGridColumn in Flex?是否可以将数组存储在 Flex 的 DataGridColumn 中?
【发布时间】:2009-08-31 21:35:20
【问题描述】:

我有一个带有按钮的数据网格列,该按钮打开一个模式对话框,允许用户上传多个文件。在下面的代码中,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>

提前感谢您的任何见解,

奥维尔

【问题讨论】:

  • Orville,你能发布 FileUpload 的代码吗?谢谢。

标签: apache-flex actionscript-3


【解决方案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>

【讨论】:

    【解决方案2】:
    • 您将fileUpload.arrFiles 直接分配给arrFiles。前者是 Array 还是 ArrayCollection?你可能需要做arrFiles = new ArrayCollection(fileUpload.arrFiles);

    话虽如此,我讨厌 flex 绑定并且通常会避免它,因为它可能不可靠。在您的情况下,我会编写自己的实现 ItemRenderer 的 AS3 组件,然后在转发器更改时手动分配转发器的数据提供者。如果你这样做,你将对行为有更多的控制。并且更容易调试。

    【讨论】:

    • 感谢格伦的帮助。看来我可能不得不按照你的建议编写一个 AS3 组件。
    猜你喜欢
    • 2018-07-19
    • 2016-09-17
    • 2012-09-27
    • 2018-10-17
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-21
    相关资源
    最近更新 更多