繁体   English   中英

不显示组合框时,在Flex组合框上设置selectedItem吗?

[英]Set selectedItem on a Flex Combobox when the Combobox is not displayed?

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

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

编辑:我正在以编程方式创建组合框:

var comboBox:ComboBox = new ComboBox();

这可以正常工作,并将selectedItem设置为数据提供者的第一项- 但仅当组合框显示在屏幕上且未隐藏在可折叠组中时,才如此

我遇到的情况是,组合框可能包含在可折叠组(我自己的组件)中,并且直到折叠组展开后才显示(请参见下图)

第一张图片:当组折叠并且组合框不显示而是创建时 collapsed_groups

第二张图片:当展开的组展开以显示组合框时,请注意,未将dataprovider中的第一个元素选择为selectedItem

扩展组

下一行总是执行

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

但是在组合框包含在折叠组中的情况下,不会选择第一项-在组合框包含在扩展组中时可以正常工作。

我认为这是flex中的错误-除非有人另行考虑?

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

例如:

private var comboBoxValue:int = 0;

然后在您的comboBox上:

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

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

创建完成不会多次调用,因此您需要另一种方法来完成它。 要确保在再次显示该项目后将其设置为组件,只需在comboBox本身上调用“ callLater”方法即可(然后在再次渲染该组件之后调用该方法,而不是整个应用程序)

var comboBox:ComboBox = new ComboBox();

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

我从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()

适用于MX和Spark。

我可以通过如下设置CREATION_COMPLETE上的选定项来解决此问题:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM