Передача значения массива из сценария .as в comboBox кода .mxml - PullRequest
0 голосов
/ 13 августа 2011

Как передать значение array из .as в код comboBox из .mxml ? Я вызываю сценарий .as в .mxml коде. У меня есть <mx:ComboBox>, для которого поставщик данных является значением array из того же файла .as . Как связать это с 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 голосов
/ 13 августа 2011

Класс Array является объектом верхнего уровня и не реализует IEventDispatcher , который требуется для привязки. Попробуйте вместо этого использовать ArrayCollection .

Обновление: Чтобы добавить элементы в ArrayCollection, вы можете либо использовать метод addItem () , либо использовать метод push() объекта Array, который ArrayCollection переносит в свойство источник . Однако всякий раз, когда вы вносите прямые изменения в массив source, вам необходимо вызывать метод refresh ().

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

Метод addItem() предпочтителен.

Обновление 2: mx: ComboBox имеет свойство labelField , которое определяет, какое поле из элементов в dataProvider использовать. Чтобы отобразить name объекта FileReference, это должно сделать следующее:

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