[英]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设置为数据提供者的第一项- 但仅当组合框显示在屏幕上且未隐藏在可折叠组中时,才如此 。
我遇到的情况是,组合框可能包含在可折叠组(我自己的组件)中,并且直到折叠组展开后才显示(请参见下图)
第一张图片:当组折叠并且组合框不显示而是创建时
第二张图片:当展开的组展开以显示组合框时,请注意,未将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.