2012-04-17 125 views
0

我想設置數組中的項目順序集合並使用組合框進行綁定。我如何在Flex組合框中設置項目的索引?

這裏是我的代碼

[Bindable]private var langList:ArrayCollection = new ArrayCollection([{label:"Englis"},{label:"Urdu"},{label:"Arabic"},{label:"Spanish"}]); 

protected function cbm_creationCompleteHandler(event:FlexEvent):void 
      { 
       for(var i:int =0; i< langList.length; i++) 
       { 

        if(langList[i].label == 'Urdu') 
        { 
         cbm.setChildIndex(cbm.getChildAt(i), 0); 
         break; 
        } 
       } 


      } 
<s:ComboBox id="cbm" x="258" y="113" dataProvider="{langList}" creationComplete="cbm_creationCompleteHandler(event)"/> 

當我嘗試編譯器

的RangeError運行它下面的異常拋出:錯誤#2006:提供的索引超出範圍。

回答

2

要小心,ComboBox::getChildAt不會返回列表項,你不應該訪問一個Flex組件的子組件,這是一個皮膚問題。

如果您想要更改元素的順序,您必須在dataProvider中執行此操作,這是一個數據問題。

for(var i:int =0; i< langList.length; i++) 
{ 
    var item:Object = langList[i]; 
    if(item.label == 'Urdu') 
    { 
     langList.removeItemAt(i); 
     langList.addItemAt(item, 0); 
     break; 
    } 
} 

由於您的langListBindable,組合框會自動更新。

+0

我應用此代碼,但該項目重複一箇舊的索引,我們通過強制添加。 – 2012-04-17 16:36:49

+0

我編輯了我的答案。 – Kodiak 2012-04-17 16:39:20

+0

現在的解決方案工作正常,只有改變是langList.removeItem(i);我使用langList.removeItemAt(i); – 2012-04-17 16:51:53

相關問題