-1

使用 Flash Builder 4.6 我想对 arrayCollection 进行排序。该数组有 2 个属性 status 和 help_id。我想对数组进行排序以使所有“打开”状态都位于顶部,而不是所有“已读”、“现场”、“完成”等等。我创建了一个函数来执行此操作,但我希望所有具有相同状态的项目都按 help_id 属性最高的第一个最低的最后一个排序。

这是我对状态进行排序的代码。

    [Bindable]protected var myHelp:ArrayCollection = new ArrayCollection();

排序功能:

    function sortFunction(a:Object, b:Object, array:Array = null):int
                {

                    var status:Array = ["open", "read", "onsite","complete", "reopen", "closed"];
                    var aStatus:Number = status.indexOf(a.status);
                    var bStatus:Number = status.indexOf(b.status);
                    if(aStatus == -1 || bStatus == -1)
                        throw new Error("Invalid value for criticality ");
                    if(aStatus == bStatus)
                        return 0;
                    if(aStatus > bStatus)
                        return 1;
                    return -1;
                }
                var sort:Sort = new Sort();
                sort.compareFunction = sortFunction;
                myHelp.sort = sort;
                myHelp.refresh();

任何帮助将非常感激。

4

1 回答 1

0

与其在数组中查找字符串索引,不如对两者都使用整数。在您的代码中,您可以引用 StatusType.OPEN 等常量...然后您的代码可能如下所示:

var sort:Sort = new Sort();
sort.fields = [new SortField("status", true, true), new SortField("help_id", true, true)];
myHelp.sort = sort;
myHelp.refresh();

这将同时按状态排序,然后按 help_id 排序。然后当您需要在 GUI 中向用户显示状态时,将 int 转换为 String 人类可读的值

于 2012-11-02T21:29:54.863 回答