当Combobox不显示时,在Flex Combobox上设置selectedItem?

我正尝试在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设置为来自数据提供者的第一项 - 但只有当组合框显示在屏幕上而不隐藏在可折叠组中时

我有一种情况,我可能会将组合框包含在可折叠组(我自己的组件)中,并且在展开折叠组之后才显示(请参阅下面的图像)

第一张图片:当组合被折叠并且组合框未被显示但被创建时

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

以下行总是执行

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

但是,如果组合框被封装在折叠组中,则不会选择第一项 - 当组合框包含在扩展组中时可以正常工作。

我认为这是一个灵活的错误 - 除非有人认为是另一回事?


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

“创建完成”不会被多次调用,因此您需要另一种方式来执行此操作。 为了确保项目在被再次显示后被设置为组件,只需在组合框本身上调用“callLater”方法(然后在组件被再次渲染后调用该方法,而不是整个应用程序)

var comboBox:ComboBox = new ComboBox();

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

我以前看过这个问题。 我通过设置全局变量并将comboBox的选定项设置为变量的值来解决此问题。

例如:

private var comboBoxValue:int = 0;

然后在你的组合框上:

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

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

链接地址: http://www.djcxy.com/p/34581.html

上一篇: Set selectedItem on a Flex Combobox when the Combobox is not displayed?

下一篇: Flex editable combobox