Flex Dropdownlist dataprovider在刷新时重置

时间:2012-12-27 13:50:06

标签: actionscript-3 flex sorting arraycollection dataprovider

我有几个dropdownlist控件,它们共享相同的dataprovider(相同的引用)。

我已经覆盖了排序函数的set dataprovider方法。(下面的代码)。问题在于,当我将此共享数据提供者设置为新的下拉列表时,共享数据转换器的所有现有下拉控制都将被取消选择(丢失其先前选择的值)。

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

2 个答案:

答案 0 :(得分:1)

在组件之间有大量的isues共享dataProvider。我们与很多客户使用我们的AutoCompleteComboBox遇到了这个问题。

您可以轻松地为每个dataProvider使用相同的源,但使用不同的 - 单独的 - 集合。

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

每个集合只是基础源​​的包装器。对其中一个进行排序不会影响其他任何一个,使您的其他ComboBox或DropDownLists保持不变。

答案 1 :(得分:0)

我没有对此进行过研究,但有两个问题/想法即将出现:

  1. 如果您确实对同一个arraycollection使用相同的引用,则不需要多次对此数组进行排序(实际上,您通过多次分配相同的arraycollection来实现此目的)
  2. 如果它只涉及单选下拉菜单,那么有一个简单的解决方案:

    var oldSelected : TypeOfItem = selectedItem as TypeOfItem;
    // do the sort (like in your code)
    super.dataProvider=value;
    selectedIndex = getItemIndex(oldSelected);