Actionscript 3 当组合框未显示时,是否在Flex组合框上设置selectedItem?

Actionscript 3 当组合框未显示时,是否在Flex组合框上设置selectedItem?,actionscript-3,apache-flex,flex4,Actionscript 3,Apache Flex,Flex4,我正在尝试在组合框(mx)上设置selectedItem。代码如下: callLater(function ():void { if (comboBox.dataProvider && comboBox.dataProvider.length > 0) { comboBox.selectedItem = comboBox.dataProvider.getItemAt(0); } }); 编辑:我正在以编程方式创建组合

我正在尝试在组合框(mx)上设置selectedItem。代码如下:

callLater(function ():void {
        if (comboBox.dataProvider && comboBox.dataProvider.length > 0) {
            comboBox.selectedItem = comboBox.dataProvider.getItemAt(0);
        }
});
编辑:我正在以编程方式创建组合框:

var comboBox:ComboBox = new ComboBox();
这可以正常工作,并将selectedItem设置为数据提供程序中的第一项-,但仅当组合框显示在屏幕上且未隐藏在可折叠组中时

我的情况是,我可能将组合框封装在可折叠组(我自己的组件)中,并且在折叠组展开之前不会显示组合框(请参见下图)

第一个图像:当组折叠且组合框不显示但已创建时

第二幅图:当折叠的组展开以显示组合框时-请注意,dataprovider中的第一个元素未被选择为selectedItem

始终执行以下行

 comboBox.selectedItem = comboBox.dataProvider.getItemAt(0);
但是当组合框包含在一个折叠的组中时,第一项不会被选中——当组合框包含在一个扩展的组中时,效果很好


我认为这是flex中的一个bug-除非有人另有想法?

我以前见过这个问题。我通过设置一个全局变量并将组合框的选定项设置为变量的值来解决这个问题

例如:

private var comboBoxValue:int = 0;
然后在组合框上:

<mx:ComboBox id="myComboBox" updateComplete="{myComboBox.selectedItem = comboBoxValue}" change="functionToChangeVariable()"/>

我以前见过这个问题。我通过设置一个全局变量并将组合框的选定项设置为变量的值来解决这个问题

例如:

private var comboBoxValue:int = 0;
然后在组合框上:

<mx:ComboBox id="myComboBox" updateComplete="{myComboBox.selectedItem = comboBoxValue}" change="functionToChangeVariable()"/>

我从flex sdk 3开始使用combobox。我以前设置selectedIndex而不是selectedItem。这是一种变通方法,但对我来说总是有效的:

<ComboBox id="comboBox"
   dataProvider="{model.dataProvider}"
   selectedIndex="{getItemIndex(comboBox.dataProvider, model.currentItem}"
   change="model.currentItem = comboBox.selectedItem"/>
  //getItemIndex - function with simple list.getItemIndex()

//getItemIndex-具有简单列表的函数。getItemIndex()

适用于mx和spark。

我从flex sdk 3开始使用combobox。我以前设置selectedIndex而不是selectedItem。这是一种变通方法,但对我来说总是有效的:

<ComboBox id="comboBox"
   dataProvider="{model.dataProvider}"
   selectedIndex="{getItemIndex(comboBox.dataProvider, model.currentItem}"
   change="model.currentItem = comboBox.selectedItem"/>
  //getItemIndex - function with simple list.getItemIndex()

//getItemIndex-具有简单列表的函数。getItemIndex()

适用于mx和spark。

我可以通过在创建完成时设置所选项目来解决此问题,如下所示:

comboBox.addEventListener(FlexEvent.CREATION_COMPLETE, function(){
         comboBox.selectedItem = comboBox.dataProvider.getItemAt(0);
});

我可以通过如下方式在创建时设置所选项目来解决此问题:

comboBox.addEventListener(FlexEvent.CREATION_COMPLETE, function(){
         comboBox.selectedItem = comboBox.dataProvider.getItemAt(0);
});

问题是您无法知道对象何时添加到阶段。如您所述,如果组件不可见,则不会设置该项

创建完成不会多次调用,因此需要另一种方法来完成。 要确保在组件再次可见后将该项设置为组件,只需在组合框本身上调用“callLater”方法(然后在组件再次呈现后调用该方法,而不是整个应用程序)


问题是您无法知道对象何时添加到阶段。如您所述,如果组件不可见,则不会设置该项

创建完成不会多次调用,因此需要另一种方法来完成。 要确保在组件再次可见后将该项设置为组件,只需在组合框本身上调用“callLater”方法(然后在组件再次呈现后调用该方法,而不是整个应用程序)


我正在以编程方式创建组合框-在这种情况下有没有办法处理updatecomplete?您可以添加和删除事件侦听器,如下所示:
comboBox.addEventListener(FlexEvent.UPDATE_COMPLETE,handleUpdateComplete)谢谢@MarjoleinKleinman-我就是这么做的。我使用CREATION_COMPLETE是因为在UPDATE_COMPLETE时,我无法从Combo中选择任何其他值(在选择时,UPDATE_COMPLETE再次激发并再次选择第一项)我以编程方式创建ComboBox-在这种情况下是否有方法处理updatecomplete?您可以添加和删除事件侦听器,如下所示:
comboBox.addEventListener(FlexEvent.UPDATE\u COMPLETE,handleUpdateComplete)谢谢@MarjoleinKleinman-我就是这么做的。我使用CREATION_COMPLETE是因为在UPDATE_COMPLETE时,我无法从Combo中选择任何其他值(在选择时,UPDATE_COMPLETE再次激发并再次选择第一项),selectedIndex也不起作用。问题在于,当呈现布局时,组合框不会显示,只有在展开可折叠组时,组合框才会显示SelectedIndex也不起作用。问题在于,当呈现布局时,组合框不会显示,只有在展开可折叠组时,组合框才会显示