2010-11-26 3 views
0

다른 ArrayCollection에 중첩되어 있습니다. 자식 컬렉션을 필드로 정렬해야합니다. 다음 코드를 시도했습니다. 부모 컬렉션에 대해서는 정상적으로 작동하지만 자식 컬렉션에는 아무런 영향을주지 않습니다.Flex 중첩 ArrayCollections 정렬

// The Data 

public class Data 
{ 
    public var value:String; 
    public var otherValue:String; 
    public var childrenData:ArrayCollection; // An array collection containing Data objects. 
} 

// The sorting function 

private function sortData():void 
{ 
    var records:ArrayCollection() = bla bla (init the collection with some Data objects). 

    records.sort = new Sort(); 
    records.sort.fields = [ 
    new SortField('value', true, false) 
    ]; 

    for each (var data:Data in records){ 
    sortChildren(data); 
    } 
    records.refresh(); 
} 

private function sortChildren(data:Data):void 
{ 
    if (data.childrenData != null) { 
    var srt:Sort = new Sort(); 
    srt.fields = [ 
     new SortField('otherValue', true, false) 
    ]; 
    data.childrenData.sort = srt; 
    data.childrenData.refresh(); 
    } 
} 

제가 잘못하고있는 것을 알아낼 수 없으므로 도움을 받으실 수 있습니다. 사전에

감사합니다,

답변

0

나는 그런 일이 왜 정확히 모르겠어요. 그러나,

otherValue에 의해 value 에 의해 childData에서 elmenents를 정렬 할 수 있을까 ... 그 자식 컬렉션에 상속 sort처럼 보인다? 이 경우 IHierarchicalCollectionView을 사용하여 모든 요소를 ​​정렬 할 수 있습니다. 다음 예를 살펴 :

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx" initialize="init()"> 

    <fx:Script> 
     <![CDATA[ 
      import mx.collections.ArrayCollection; 
      import mx.collections.HierarchicalCollectionView; 
      import mx.collections.HierarchicalData; 
      import mx.collections.IHierarchicalCollectionView; 
      import mx.collections.Sort; 
      import mx.collections.SortField; 

      private var records:ArrayCollection = new ArrayCollection([ 
       new Data("S", null, new ArrayCollection([ 
        new Data(null, "R", null), 
        new Data(null, "B", null), 
        new Data(null, "L", null) 
       ])), 
       new Data("A", null, new ArrayCollection([ 
        new Data(null, "P", null), 
        new Data(null, "O", null) 
       ])), 
       new Data("X", null, new ArrayCollection([ 
        new Data(null, "C", null), 
        new Data(null, "F", null), 
        new Data(null, "E", null) 
       ])) 
       ]); 

      [Bindable] 
      private var hierarchicalView:IHierarchicalCollectionView; 

      private function init():void 
      { 
       var hierarchicalRecords:HierarchicalData = new HierarchicalData(records); 

       // you don't need this if your field is named 'children' which is the default... 
       hierarchicalRecords.childrenField = "childrenData"; 

       hierarchicalView = new HierarchicalCollectionView(hierarchicalRecords); 
       sortData(hierarchicalView); 
      } 

      private function sortData(view:IHierarchicalCollectionView):void 
      { 
       var x:ArrayCollection; 
       view.sort = new Sort(); 
       view.sort.fields = [new SortField('value', true, false), new SortField('otherValue', true, false)]; 
       view.refresh(); 
      } 
     ]]> 
    </fx:Script> 

    <s:layout> 
     <s:HorizontalLayout horizontalAlign="center" verticalAlign="middle"/> 
    </s:layout> 

    <mx:AdvancedDataGrid designViewDataType="tree" height="80%" dataProvider="{hierarchicalView}" 
         creationComplete="event.currentTarget.expandAll()"> 
     <mx:columns> 
      <mx:AdvancedDataGridColumn dataField="value"/> 
      <mx:AdvancedDataGridColumn dataField="otherValue"/> 
     </mx:columns> 
    </mx:AdvancedDataGrid> 
</s:Application> 

또 다른 옵션이 따라 개체를 비교하는 compareFunction를 작성하는 것입니다.

관련 문제