2012-04-17 17 views
0

配列にあるアイテムの順序を設定したいと思います。コレクションとコンボボックスでバインドします。エラー#2006:指定したインデックスが範囲外である私は、コンパイラフレックスのコンボボックスでアイテムのインデックスを設定する方法は?

例外RangeErrorによってそれを次の例外スローを実行しようとすると

は、ここに私のコード

[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)"/> 

です。

答えて

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; 
    } 
} 

あなたlangListは、コンボボックスが自動的に更新されます、Bindableですので。

+0

私はこのコードを適用しますが、項目は古いものと強く追加するインデックスのものとで繰り返します。 –

+0

私は私の答えを編集しました。 – Kodiak

+0

今ソリューションはうまく動作しますが、代わりにlangList.removeItem(i)のみが変更されます。私はlangList.removeItemAt(i)を使用します。 –

関連する問題