0

同じデータプロバイダー(同じ参照)を共有するドロップダウンリストコントロールがいくつかあります。

ソート関数のsetdataproviderメソッドをオーバーライドしました(以下のコード)。問題は、この共有データプロバイダーを新しいドロップダウンリストに設定すると、dataprviderを共有している既存のドロップダウンコントロールがすべて選択解除される(以前に選択された値が失われる)ことです。

    override public function set dataProvider(value:IList):void{
            if(value is ArrayCollection){
            var sort:Sort=new Sort();
            var sortField:SortField = new SortField();
            sortField.numeric=false;
            sort.fields=[sortField];

            ArrayCollection(value).sort=sort;
            ArrayCollection(value).refresh();
        }
        super.dataProvider=value; 
    }
4

2 に答える 2

1

コンポーネント間で dataProvider を共有することには多くの問題があります。AutoCompleteComboBox を使用している多くのクライアントでこれに遭遇しました。

同じソースを簡単に使用できますが、dataProvider ごとに異なる (個別の) コレクションを使用できます。

var dataProvider1 :ArrayCollection = new ArrayCollection(someArray);
var dataProvider2 :ArrayCollection = new ArrayCollection(someArray);
var dataProvider3 :ArrayCollection = new ArrayCollection(someArray);

各コレクションは、ベース ソースの単なるラッパーです。1 つを並べ替えても他のものには影響せず、他の ComboBoxes または DropDownLists は変更されません。

于 2012-12-28T03:03:57.647 に答える
0

私はこれについて調査しませんでしたが、2つの問題/アイデアが浮かび上がってきました:

  1. 同じ arraycollection に対して文字通り同じ参照を使用する場合、この配列を複数回ソートする必要はありません (実際には、同じ arraycollection を複数回割り当てることによってこれを行います)。
  2. 単一選択のドロップダウンのみに関する場合は、簡単な解決策があります。

    var oldSelected : TypeOfItem = selectedItem as TypeOfItem;
    // do the sort (like in your code)
    super.dataProvider=value;
    selectedIndex = getItemIndex(oldSelected);
    
于 2012-12-27T14:19:15.773 に答える