AS3:如何使Parent Function返回ComboBox的选定值

时间:2010-12-02 04:16:22

标签: flash actionscript-3 combobox event-handling return-value

我正在开发一个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 :(得分:0)

这对我有用,我正在使用带有Hero SDK的FB Burrito

<?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>

答案 1 :(得分:0)

您无法从事件处理程序返回函数。函数也不能从像这样的嵌套函数返回函数。此外,函数将在调用后立即返回值 - 在事件发生之前,您不能将其推迟。只是一条建议,嵌套这样的命名函数通常不是好习惯。

我不清楚你想要实现的最终结果,但你可能想要更接近这个:

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
}