内部类的Flex排序数组集合

时间:2011-09-19 13:55:47

标签: flex sorting actionscript flex4

我想以一种我不确定的方式对数组进行排序。

通常当你想要排序时,你会有这样的事情。

var dataSortField1:SortField = new SortField();
dataSortField1.name = fieldOneToSortBy;
dataSortField1.numeric = fieldOneIsNumeric;

var dataSort:Sort = new Sort();
dataSort.fields = [dataSortField1];

arrayCollection.sort = dataSort;
arrayCollection.refresh();

所以,如果我有一个班级

public class ToSort {
    public var int:a
}

我可以输入

var ts1:ToSort = new ToSort();  
ts1.a = 10;
var ts2:ToSort = new ToSort();  
ts2.a = 20;
var arrayCollection:ArrayCollection = new ArrayCollection([ts1, ts2])
var dataSortField1:SortField = new SortField();
dataSortField1.name = "a";
dataSortField1.numeric = true;

var dataSort:Sort = new Sort();
dataSort.fields = [dataSortField1];

arrayCollection.sort = dataSort;
arrayCollection.refresh();

这很好用。我的问题是我现在继承了一个在其中有另一个类的类,我也需要对此进行排序。 例如

public class ToSort2 {
    public var int:a
    public var ToSortInner: inner1
}

public class ToSortInner {
    public var int:aa
    public var int:bb
}

如果a在多个类中相同,那么我想对ToSortInner2.aa进行排序这是否可行。我试图将inner1.aa作为排序字段名称传递,但这不起作用。

希望这很清楚。如果没有,我会发布更多代码。

由于

2 个答案:

答案 0 :(得分:2)

您需要编写自定义排序compareFunction。您可以深入查看函数内的对象属性。

概念上是这样的:

public function aSort(a:Object, b:Object, fields:Array = null):int{
  if(a.aa is b.aa){
    return 0
  } else if(a.aa > b.aa) {
    return 1
  } else{
    return -1
  }
}

创建排序对象时,可以指定比较功能:

var dataSort:Sort = new Sort();
dataSort.compareFunction = aSort;

arrayCollection.sort = dataSort;
arrayCollection.refresh();

答案 1 :(得分:0)

Sort还有另一个属性compareFunction。