我有一个从实时 XML 数据源创建的 flex 数组集合,并且正在尝试在让 UI 显示信息/列表之前使用数组中的日期/时间字符串对数组进行排序......当前数组已创建并显示正常,但按日期/时间排序无法正常工作...
如果我将排序字段 (dataSortField.name) 更改为"name"(仅基于我的 xml 源生成的文件名的字母数字文本字符串),则该例程有效,但是如果我使用"datemodified"作为排序字段(即 7/24/2013 12:53:02 PM ),它不会按日期排序,只是尝试按字母顺序排序,因此日期顺序根本不正确,例如它显示 1/10/2013 10:41:57 PM 然后而不是 2/1/2013 11:00:00 PM 接下来它显示 10/10/2013下午 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 更改为"名称"(这是字母数字文件名),它会对 a-z 进行排序就好了......那么我如何让它按日期排序,我的数组数据看起来像 2013/7/24 12:00:00 PM
现在,日期的 TIME 部分对于我的排序需求来说根本不是必需的,所以我只是希望按日期排序,除此之外的时间对我的需求无关紧要,而是在我的 xml 数据源中硬编码。
我尝试指定
dataSortField.numeric = true;
但这也没有用,虽然我可以使用它来指定字符串或数字,但没有我期望的 DATE 选项。
所以我的问题是,为了澄清,我如何让 SORT 函数确认我想根据数组中的一系列日期/时间戳进行排序? 我使用 apache flex 4.9.1/fb 4.6 高级版)。
我将其用作日期比较函数:
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();