[英]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.