我正在尝试在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);
但是当组合框被包含在折叠组中时,没有选择第一项 - 当组合框被包含在扩展组中时工作正常。
我认为这是flex中的一个错误 - 除非有人另有想法?
答案 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);
});