0

配列コレクションにあるアイテムの順序を設定し、コンボボックスでバインドしたい。

ここに私のコードがあります

[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: 指定されたインデックスが範囲外です。

4

1 に答える 1

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であるため、コンボボックスは自動的に更新されます。

于 2012-04-17T16:19:23.363 に答える