Apache flex Flex嵌套数组集合排序
我在另一个集合中嵌套了一个ArrayCollection。我需要按字段对子集合进行排序。 我尝试了以下代码。它对父集合有效,但对子集合无效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
// 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>