如果未显示Combobox,请在Flex Combobox上设置selectedItem?

时间:2012-05-30 14:05:26

标签: actionscript-3 flex flex4

我正在尝试在comboBox(mx)上设置selectedItem。以下是代码:

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

var comboBox:ComboBox = new ComboBox();

这样可以正常工作,并将selectedItem设置为数据提供者的第一项 - ,但仅限组合框显示在屏幕上而不是隐藏在可折叠组中

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

第一张图片:折叠组时,组合框未显示但已创建 collapsed_groups

第二张图片:展开折叠组以显示组合框时 - 请注意数据提供者中的第一个元素未被选为selectedItem

Expanded Group

以下行始终执行

 comboBox.selectedItem = comboBox.dataProvider.getItemAt(0);

但是当组合框被包含在折叠组中时,没有选择第一项 - 当组合框被包含在扩展组中时工作正常。

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

4 个答案:

答案 0 :(得分:2)

我过去曾见过这个问题。我通过设置一个全局变量并将comboBox的选定项设置为变量的值来解决它。

例如:

private var comboBoxValue:int = 0;

然后在你的comboBox上:

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

答案 1 :(得分:2)

问题在于您无法知道何时将对象添加到舞台中。正如您提到的那样,如果组件不可见,则不会设置该项目。

创建完成不会多次调用,因此您需要另一种方法来执行此操作。 要确保项目在再次可见之后设置为组件,只需在comboBox本身上调用'callLater'方法(然后在再次呈现组件后调用该方法,而不是整个应用程序)

var comboBox:ComboBox = new ComboBox();

comboBox.callLater(function ():void {
    if (comboBox.dataProvider && comboBox.dataProvider.length > 0) {
        comboBox.selectedItem = comboBox.dataProvider.getItemAt(0);
    }
});

答案 2 :(得分:0)

我从flex sdk开始使用combobox 3.我曾经设置了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()

适用于mx和spark。

答案 3 :(得分:0)

我可以通过在CREATION_COMPLETE上设置所选项目来解决此问题,如下所示:

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