2

我正在尝试在组合框(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 中的一个错误——除非有人不这么认为?

4

4 回答 4

2

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

例如:

private var comboBoxValue:int = 0;

然后在你的组合框上:

<mx:ComboBox id="myComboBox" updateComplete="{myComboBox.selectedItem = comboBoxValue}" change="functionToChangeVariable()"/>
于 2012-05-30T14:40:07.460 回答
2

问题是您无法知道对象何时添加到舞台。正如您已经提到的,如果组件不可见,则不会设置该项目。

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

var comboBox:ComboBox = new ComboBox();

comboBox.callLater(function ():void {
    if (comboBox.dataProvider && comboBox.dataProvider.length > 0) {
        comboBox.selectedItem = comboBox.dataProvider.getItemAt(0);
    }
});
于 2012-06-15T11:31:43.967 回答
0

我从 flex sdk 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。

于 2012-05-30T14:43:15.840 回答
0

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

comboBox.addEventListener(FlexEvent.CREATION_COMPLETE, function(){
         comboBox.selectedItem = comboBox.dataProvider.getItemAt(0);
});
于 2012-05-31T06:28:33.130 回答