4

Flex 3.2 SDK でコンパイルされたプロジェクトがあります。

私のコンポーネントの 1 つは、Cairngorm モデルのプロパティ (products と呼ばれる) にバインドされているコンボボックスです。model.products に新しい値を挿入すると、コンボボックスにすぐに新しい値が表示されます。完璧に動作します。

その後、3.5 SDK に移行しましたが、同じ操作を実行すると問題が発生します。モデルが更新されたにもかかわらず (これが間違いなく当てはまることを確認しました)、コンボボックスに新しい値が正しく表示されません。コンボに新しい行があるため、新しいアイテムがあることを認識しているようです。しかし、新しい行は空白で選択できません。コンボ内の既存のアイテムはそこにあり、選択可能です (そうあるべきです)。フォームを再初期化すると (つまり、コンボが配置されている TitleWindow を閉じて再度開くと)、すべての正しい値 (新しい値を含む) がコンボに表示されます。

これが根本的な原因であることを確認するために、3.2 と 3.5 を何度か切り替えました。

これを回避する方法についてのアイデアは大歓迎です。

4

2 に答える 2

6

dataProvider を変更していますか、それとも置き換えていますか?

Flextras AutoCompleteComboBox の Flex 4 バージョンでは、ComboBox の dataProvider がドロップダウンの dataProvider と同期しなくなることがあります。AutoComplete を ComboBox に追加するために行った変更により、これはすべて私のせいであると考えました。

この変更が Flex 3.5 で追加された可能性は十分にあります。Flex 4 の冒険をするまで、私はそれに気づきませんでした。

まず、dataProvider が変更されたときに ComboBox を無効にしようとします。これは、コレクションの collectionChange イベントをリッスンすることで実行できます。イベントハンドラーで次のようにします。

myCombo.invalidateProperties()
myCombo.invalidateDisplayList()

dataPRvider を置き換えている場合は、set dataProvider メソッドをオーバーライドして、次のような行を追加してみてください。

this.dropdown.dataProvider = value;

奇妙な問題です。Flex 3 / 3.2 では、dataPRovider が変更されるたびに、ドロップダウンが閉じられ [破棄] され、再作成されたと思います。彼らはある時点でそれをやめたようです。これがこの異常を引き起こします。

于 2010-06-09T13:54:20.663 に答える
5
//this will replace the list base on an update
private var newDropDown:ListBase;

//This addresses a bug in flex 3.5 SDK 
//where the list base does reflect changes to the data provider
//forums.adobe.com/thread/597632  
//bugs.adobe.com/jira/browse/SDK-25705 
//bugs.adobe.com/jira/browse/SDK-25567
override public function set dataProvider(value:Object):void
{
    super.dataProvider = value;
    newDropDown = dropdown;

    if(newDropDown)
    {
        validateSize(true);
        newDropDown.dataProvider = super.dataProvider;
    }
}
于 2010-06-09T19:57:28.690 に答える