【问题标题】:Flex sort array collection by inner classFlex按内部类排序数组集合
【发布时间】:2011-11-20 06:54:22
【问题描述】:

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

通常当你想要排序时,你有这样的东西。

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 作为排序字段名称传递,但这不起作用。

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

谢谢

【问题讨论】:

    标签: apache-flex sorting actionscript flex4


    【解决方案1】:

    您需要编写自定义排序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();
    

    【讨论】:

      【解决方案2】:

      Sort 还有另一个属性 compareFunction。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-15
        • 1970-01-01
        • 2016-11-29
        • 1970-01-01
        • 2011-11-01
        • 2017-11-20
        • 2015-04-27
        • 1970-01-01
        相关资源
        最近更新 更多