簡體   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