将.as脚本中的数组值传递给.mxml代码的comboBox

时间:2011-08-12 23:24:27

标签: actionscript-3 flexbuilder

如何将 .as 中的array值传递给 .mxml 代码的comboBox? 我在 .mxml 代码中调用.as脚本。我有<mx:ComboBox>,其数据数据提取器是来自同一 .as 文件的array值。如何将其绑定到combobox? 我的两个代码如下:

// ActionScript file

    import flash.display.*;
    import flash.events.*;
    import flash.net.FileFilter;
    import flash.net.FileReference;
    import flash.net.FileReferenceList;

    import mx.controls.Alert;

        private var fr:FileReferenceList;
        private var fls:Array;

        private function folder():void
        {
            fr = new FileReferenceList();
            fr.browse([new FileFilter("Zip Files", "*.zip")]);
            fr.addEventListener(Event.SELECT, listZipFiles);            
        }

        private function listZipFiles(e:Event):void
        {
            Alert.show("selectHandler: " + fr.fileList.length + " files");          
            var file:FileReference = new FileReference;
            fls = new Array();

            for (var i:uint = 0; i < fr.fileList.length; i++) 
            {
                file = FileReference(fr.fileList[i]);
                //Alert.show("File Name: " + fr.fileList[i]);
                Alert.show("File Name: " + file.name);
                fls.push(file);                         
            }
            Alert.show("fls: " + fls);
            gotoCmboBx(fls);
        }

        private function gotoCmboBx(arr:Array):Array
        {

        }
        private function getShpFiles(event:MouseEvent):void
        {

        }

和.mxml代码是:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:Script source="Asset/folder.as" />
    <mx:Button x="10" y="10" label="My Button" width="122" height="31" id="myButton" click="folder()"/>
    <mx:ComboBox x="10" y="49" id="cbobx" dataProvider="{fls}"  ></mx:ComboBox>

</mx:Application>

1 个答案:

答案 0 :(得分:0)

Array类是顶级对象,不实现绑定所需的IEventDispatcher。请尝试使用ArrayCollection

更新:要向ArrayCollection添加项目,您可以使用addItem()方法,也可以使用ArrayCollection在属性中包含的Array的push()方法source。但是,每当您对source数组进行直接更改时,都需要调用refresh()方法。

myArr.source.push(myFileReference);
myArr.refresh();

首选addItem()方法。

更新2: mx:ComboBox有一个属性labelField,用于确定dataProvider中要使用的项目中的哪个字段。为了显示FileReference对象的name,应该执行以下操作:

<mx:ComboBox dataProvider="{fls}" labelField="name"/>