Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex Flex嵌套数组集合排序_Apache Flex_Actionscript 3_Actionscript - Fatal编程技术网

Apache flex Flex嵌套数组集合排序

Apache flex Flex嵌套数组集合排序,apache-flex,actionscript-3,actionscript,Apache Flex,Actionscript 3,Actionscript,我在另一个集合中嵌套了一个ArrayCollection。我需要按字段对子集合进行排序。 我尝试了以下代码。它对父集合有效,但对子集合无效 // The Data public class Data { public var value:String; public var otherValue:String; public var childrenData:ArrayCollection; // An array collection containing Data o

我在另一个集合中嵌套了一个ArrayCollection。我需要按字段对子集合进行排序。 我尝试了以下代码。它对父集合有效,但对子集合无效

    // 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();
  }  
}
我不知道我做错了什么,所以如果能提供一些帮助,我将不胜感激


提前谢谢,

我不太清楚为什么会这样。但是,看起来
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>