2012-12-27 64 views
0

我有幾個dropdownlist控件,共享相同的dataprovider(相同的參考)。Flex下拉列表數據提供重置在刷新

我已經重寫了sort函數的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; 
    } 
+1

對每個組件中的dataProvider進行排序似乎會引入如此和/或將來的隨機問題。是否有可能在組件外排序一次?一般來說,組件在渲染時不應該修改數據(某些Flex圖表組件會這樣做,並警告您它們會「破壞」數據)。以下來自@Markus Rossler的建議已被發現,除非要小心索引因排序而改變。 –

回答

1

在組件之間有大量的isue共享dataProvider。我們已經用很多使用AutoCompleteComboBox的客戶端來解決這個問題。

您可以輕鬆地爲每個dataProviders使用相同的源,但是使用不同的 - separate - collection。

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

每個集合都只是一個基本來源的包裝。對其中一個進行排序不會影響其他任何其他組件,因此不會影響其他ComboBoxes或DropDownLists。

+0

我創建了列表的新實例並解決了問題。 感謝所有。 :) – Saju

0

我也沒有這方面的研究,但有兩個問題/想法來了:

  1. 如果你從字面上使用相同的參照相同的ArrayCollection,則不需要進行排序這個數組不止一次
  2. (你實際上是通過分配相同的ArrayCollection不止一次這樣做),如果只左右單項選擇下拉列表,然後有一個簡單的解決方案:

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

另一個想法(未經測試!)是:在第一行中分配數據提供者,而不是在最後一行。 –

+0

我試過第二種方法,但沒有工作。關於第一個,我無法確定數據提供者是否被排序。我總是希望下拉列表顯示排序列表,在任何他們使用,相同。關於排序的 – Saju

+0

:我的意思是,如果您爲一個以上的dropdownlist使用一個arraycollection,那麼您實際上爲每個「myDropDown.dataProvider = theOneArrayCollection;」調用排序。分配。那麼如何對arraycollection進行一次排序並將已經排序的arraycollection版本分配給下拉菜單? –

相關問題