代码之家  ›  专栏  ›  技术社区  ›  tamak

可以根据日期/时间值而不是普通的文本字符串/alpha对Flex arrayCollection执行排序吗?

  •  0
  • tamak  · 技术社区  · 11 年前

    我有一个从实时XML数据源创建的flex数组集合,并试图在UI显示信息/列表之前使用数组中的日期/时间字符串对数组进行排序。。。当前数组已创建并显示良好,但按日期/时间排序的操作不正常。。。

    如果我将排序字段(dataSortField.name)更改为“name”(只是基于我的xml源生成的文件名的字母数字文本字符串),那么例程就可以工作,但如果我使用“datemodified”作为排序字段(即7/24/2013 12:53:02 PM),它就不会按日期排序,只是试图按字母顺序排序,所以日期顺序根本不正确,例如,它显示的是2013年10月1日下午10:41:57,而不是2013年2月1日晚上11:00:00,然后显示的是2013.10.10下午5:37:18。因此,它将日期/时间用作常规文本字符串

    // SORTING THE ARRAY BY DATE DESCENDING...
      var dataSortField:SortField = new SortField();
      dataSortField.name = "datemodified";
      dataSortField.descending = false;
    
      var arrayDataSort:Sort = new Sort();
      arrayDataSort.fields = [dataSortField];
    
      arr.sort = arrayDataSort;
      arr.refresh();
    

    现在,如果我将dataSortField.name更改为“name”(这是字母数字文件名),它会对a-z进行排序。。。那么,我如何使它按日期排序,其中我的数组数据看起来像2013年7月24日下午12:00:00

    现在,日期的TIME部分对我的排序需求来说根本不必要,所以我只想按日期排序,除此之外,时间对我的需求并不重要,而是在我的xml数据源中硬编码。

    我试着指定

    dataSortField.numeric = true;
    

    但这也不起作用,虽然我可以用它来指定字符串或数字,但没有我预期的DATE选项。

    因此,为了澄清,我的问题是,我如何让SORT函数确认我想根据数组中的一系列日期/时间戳进行排序?我使用的是apacheflex 4.9.1/fb 4.6高级版)。

    1 回复  |  直到 11 年前
        1
  •  1
  •   JeffryHouser    11 年前

    我将其用作日期比较函数:

    public static function genericSortCompareFunction_Date(obj1:Object, obj2:Object):int{
        //  * -1 if obj1 should appear before obj2 in ascending order.
        //  * 0 if obj1 = obj2.
        //  * 1 if obj1 should appear after obj2 in ascending order.
    
        // if you have an XML Datasource; you'll have to do something here to get the 
        // date objects out of your XML and into value1 and value2
        var value1:Date = obj1.dateField;
        var value2:Date = obj2.dateField;
    
        if(value1 == value2){
            return 0;
        }
        if(value1 < value2){
            return -1;
        }
        return 1;
    }   
    

    将此应用于您的代码;你会这样做:

      var arrayDataSort:Sort = new Sort();
      arrayDataSort.compareFunction = genericSortCompareFunction_Date;
    
      arr.sort = arrayDataSort;
      arr.refresh();