AS3: Как заставить родительскую функцию возвращать выбранное значение ComboBox - PullRequest
0 голосов
/ 02 декабря 2010

Я разрабатываю приложение AIR, для которого требуется, чтобы меню отображалось только при первом запуске.В нем пользователь сможет выбрать нужный язык для запуска приложения.

Я отображаю это меню без проблем, но мне нужно, чтобы оно оставалось видимым до тех пор, пока не будет изменен комбинированный список «Выбор языка».и затем верните значение данных выбранного выбора.

Моя проблема в том, что я не могу понять, как вернуть значение только после изменения поля со списком.

function promptFRMenu():String{
FRMenu.enabled = FRMenu.visible = true; //when I detect the app is running for the             
                                       // first time, the dialog box is enabled 
                                       // and made visible
var peferedLng:String = new String;

    FRMenu.language_CBox.addEventListener(Event.CHANGE, announceSelectedItem);
        function announceSelectedItem(e:Event):void {
                 FRMenu.enabled = FRMenu.visible=false;
                 peferedLng = e.target.selectedItem.data;
                -> return peferedLng;  
                //It is the 'parent' function that should return this value but 
               // only after it is selected
        }


}

Буду очень признателен за любую помощь.Ура!

Ответы [ 2 ]

0 голосов
/ 02 декабря 2010

вы не можете вернуть функцию из обработчика события.также функция не может вернуть функцию из вложенной функции, подобной этой.кроме того, функция вернет значение, как только оно будет вызвано - вы не можете отложить его, пока не произойдет событие.и просто совет, как правило, не рекомендуется встраивать именованные функции подобным образом.

Мне не ясно, какой результат вы хотите достичь, но вы, вероятно, хотите что-то ближе к этому:*

var peferedLng:String = new String;
function promptFRMenu():String{
  FRMenu.enabled = FRMenu.visible = true;
}
FRMenu.language_CBox.addEventListener(Event.CHANGE, announceSelectedItem);
function announceSelectedItem(e:Event):void {
   FRMenu.enabled = FRMenu.visible=false;
   peferedLng = e.target.selectedItem.data;
  // do whatever you want to do with peferedLng here
}
0 голосов
/ 02 декабря 2010

Это работает для меня, я использую FB Burrito с Hero SDK

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
    <fx:Script>
        <![CDATA[
            private function _handleChange($event:Event) :void
            {
                trace($event.target + " // CHANGED // " + $event.target.selectedItem.value);
            }
        ]]>
    </fx:Script>

    <mx:ComboBox id="comboBox" rowCount="5" labelField="label" prompt="Select One" change="_handleChange(event);">
        <mx:dataProvider>
            <s:ArrayList>
                <fx:Object label="One" value="1" />
                <fx:Object label="Two" value="2" />
                <fx:Object label="Three" value="3" />
                <fx:Object label="Four" value="4" />
                <fx:Object label="Five" value="5" />
            </s:ArrayList>
        </mx:dataProvider>
    </mx:ComboBox>

</s:Application>
...