2

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をデータプロバイダーからの最初のアイテムに設定します。ただし、コンボボックスが画面に表示され、折りたたみ可能なグループ内に非表示になっていない場合に限ります

コンボボックスが折りたたみ可能なグループ(自分のコンポーネント)に囲まれていて、折りたたまれたグループが展開されるまで表示されない場合があります(下の画像を参照)

最初の画像:グループが折りたたまれ、コンボボックスが表示されずに作成された場合 折りたたみ_グループ

2番目の画像:折りたたまれたグループが展開されてコンボボックスが表示される場合-データプロバイダーの最初の要素がselectedItemとして選択されていないことに注意してください

拡大グループ

次の行は常に実行されます

 comboBox.selectedItem = comboBox.dataProvider.getItemAt(0);

ただし、コンボボックスが折りたたまれたグループで囲まれている場合、最初の項目は選択されません。コンボボックスが展開されたグループで囲まれている場合は正常に機能します。

これはフレックスのバグだと思います-誰かが別のことを考えない限り?

4

4 に答える 4

2

問題は、オブジェクトがいつステージに追加されるかがわからないことです。すでに述べたように、コンポーネントが表示されていない場合、アイテムは設定されません。

Creation Completeは複数回呼び出されないため、別の方法で呼び出す必要があります。アイテムが再び表示された後にコンポーネントに設定されていることを確認するには、comboBox自体で'callLater'メソッドを呼び出すだけです(アプリケーション全体ではなく、コンポーネントが再度レンダリングされた後にメソッドが呼び出されます)

var comboBox:ComboBox = new ComboBox();

comboBox.callLater(function ():void {
    if (comboBox.dataProvider && comboBox.dataProvider.length > 0) {
        comboBox.selectedItem = comboBox.dataProvider.getItemAt(0);
    }
});
于 2012-06-15T11:31:43.967 に答える
2

私は過去にこの問題を見てきました。グローバル変数を設定し、comboBox の選択された項目を変数の値に設定することで、この問題を回避します。

例えば:

private var comboBoxValue:int = 0;

次に、コンボボックスで:

<mx:ComboBox id="myComboBox" updateComplete="{myComboBox.selectedItem = comboBoxValue}" change="functionToChangeVariable()"/>
于 2012-05-30T14:40:07.460 に答える
0

Flex SDK 3 以降、コンボボックスを使用しています。selectedItem の代わりに selectedIndex を設定していました。一種の回避策ですが、常に私にとってはうまくいきます:

<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 の両方で機能します。

于 2012-05-30T14:43:15.840 に答える
0

次のように、CREATION_COMPLETE で選択したアイテムを設定することで、この問題を修正できます。

comboBox.addEventListener(FlexEvent.CREATION_COMPLETE, function(){
         comboBox.selectedItem = comboBox.dataProvider.getItemAt(0);
});
于 2012-05-31T06:28:33.130 に答える