mx.collections
public class Sort
继承Sort Inheritance EventDispatcher Inheritance Object

提供在现有视图上建立排序所需的排序信息(ICollectionView 接口或实现此接口的类)。将 Sort 实例分配给视图的 sort 属性后,必须调用该视图的 refresh() 方法才能应用此排序标准。通常,这种排序是针对包含复杂项目的集合定义的,这样的集合是指那些对其中的对象的一个或多个属性执行排序的集合。以下示例显示了这种用法:
          var col:ICollectionView = new ArrayCollection();
     // In the real world, the collection would have more than one item.
     col.addItem({first:"Anders", last:"Dickerson"});
     // Create the Sort instance.
     var sort:Sort = new Sort();
     // Set the sort field; sort on the last name first, first name second.
     // Both fields are case-insensitive.
     sort.fields = [new SortField("last",true), new SortField("first",true)];
       // Assign the Sort object to the view.
     col.sort = sort;
     // Apply the sort to the collection.
       col.refresh();
        

也有集合中包含简单项目(如 StringDateBoolean 等)的情形。在这种情况下,可直接对简单类型应用排序。在构造简单项目的排序时,请使用一个排序字段,并在 SortField 对象构造函数中指定 null name(第一个)参数。例如:

            
              var col:ICollectionView = new ArrayCollection();
     col.addItem("California");
     col.addItem("Arizona");
     var sort:Sort = new Sort();
     // There is only one sort field, so use a
              null
              first parameter.
     sort.fields = [new SortField(null, true)];
     col.sort = sort;
       col.refresh();
            
          

ICollectionView 接口的 Flex 实现将先检索远程位置的所有项目,然后再执行排序。如果要对排序后的列表使用分页,请在检索数据之前对远程集合应用排序。

MXML 语法expanded隐藏 MXML 语法

The <mx:Sort> tag has the following attributes:

  <mx:Sort
  Properties
  compareFunction="Internal compare function"
  fields="null"
  unique="false | true"
  />
  

默认 MXML 属性fields

另请参见

mx.collections.ICollectionView
Using Data Providers and Collections


公共属性
 属性定义方
  compareFunction : Function
用于在排序时比较项目的方法。
Sort
 Inheritedconstructor : Object
对类对象或给定对象实例的构造函数的引用。
Object
  fields : Array
指定要比较的字段的 SortField 对象 Array。
Sort
 Inheritedprototype : Object
[静态] 对类或函数对象的原型对象的引用。
Object
  unique : Boolean
指示排序是否应是唯一的。
Sort
公共方法
 方法定义方
  
构造函数。
Sort
 Inherited
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
使用 EventDispatcher 对象注册事件侦听器对象,以使侦听器能够接收事件通知。
EventDispatcher
 Inherited
将事件调度到事件流中。
EventDispatcher
  
findItem(items:Array, values:Object, mode:String, returnInsertionIndex:Boolean = false, compareFunction:Function = null):int
查找指定的数组内的指定对象(或插入点 — 如有要求)。如果找到,则返回其索引;如果未找到,则返回 -1。
Sort
 Inherited
检查 EventDispatcher 对象是否为特定事件类型注册了任何侦听器。
EventDispatcher
 Inherited
指示对象是否已经定义了指定的属性。
Object
 Inherited
指示 Object 类的实例是否在指定为参数的对象的原型链中。
Object
  
返回表明指定的属性是否用于控制排序的布尔值。
Sort
 Inherited
指示指定的属性是否存在、是否可枚举。
Object
 Inherited
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
从 EventDispatcher 对象中删除侦听器。
EventDispatcher
  
查看所有 SortFields 并对其调用 reverse()。
Sort
 Inherited
设置循环操作动态属性的可用性。
Object
  
sort(items:Array):void
对指定的数组(不是副本)应用当前排序。
Sort
 Inherited
返回指定对象的字符串表示形式。
Object
 Inherited
返回指定对象的原始值。
Object
 Inherited
检查是否用此 EventDispatcher 对象或其任何始祖为指定事件类型注册了事件侦听器。
EventDispatcher
事件
 事件 摘要 定义方
 Inherited[广播事件] Flash Player 或 AIR 应用程序获得操作系统焦点并变为活动状态时将调度此事件。EventDispatcher
 Inherited[广播事件] Flash Player 或 AIR 应用程序失去操作系统焦点并变为非活动状态时将调度此事件。EventDispatcher
公共常量
 常量定义方
  ANY_INDEX_MODE : String = "any"
[静态] 执行查找时返回任何匹配项的索引。
Sort
  FIRST_INDEX_MODE : String = "first"
[静态] 执行查找时返回第一个匹配项的索引。
Sort
  LAST_INDEX_MODE : String = "last"
[静态] 执行查找时返回最后一个匹配项的索引。
Sort
属性详细信息
compareFunction属性
compareFunction:Function  [读写]

用于在排序时比较项目的方法。如果指定了此属性,Flex 会忽略在此类中使用的 SortField 对象中指定的所有 compareFunction 属性。

该比较函数必须具有以下签名:

            function [name](a:Object, b:Object, fields:Array = null):int
          

此函数必须返回以下值

要返回到内部比较函数,请将此值设置为 null

指定的 fields 数组会指定要比较的对象字段。通常,此算法将一直比较这些属性,直到用尽字段列表或可以返回非零值。例如:

            function myCompare(a:Object, b:Object, fields:Array = null):int
        {
            var result:int = 0;
            var i:int = 0;
            var propList:Array = fields ? fields : internalPropList;
            var len:int = propList.length;
            var propName:String;
            while (result == 0 && (i < len))
            {
                propName = propList[i];
                result = compareValues(a[propName], b[propName]);
                i++;
            }
            return result;
        }
             function compareValues(a:Object, b:Object):int
        {
            if (a == null && b == null)
                return 0;
                 if (a == null)
              return 1;
                 if (b == null)
               return -1;
                 if (a < b)
                return -1;
                 if (a > b)
                return 1;
                 return 0;
        }
          

默认值为具有以下特征的内部比较函数:可以通过区分大小写或不区分大小写的字符串比较按升序或降序执行字符串、数字或日期比较。仅在需要自定义比较算法时指定您自己的函数。这种情况通常仅当在显示中使用计算的字段时出现。

或者,您可以通过使用 SortField 类的 compare 属性分别为每个排序字段指定比较函数;这样,您可以对一些字段使用默认比较,而对其它字段使用自定义比较。



实现
    public function get compareFunction():Function
    public function set compareFunction(value:Function):void
fields属性 
fields:Array  [读写]

指定要比较的字段的 SortField 对象 Array。在进行排序时,数组中 SortField 对象的顺序确定字段的优先级顺序。默认排序比较运算符会一直检查数组顺序中的排序字段,直到确定了两个要比较的字段的排序顺序。

默认值为 null.

此属性可用作数据绑定的源。修改此属性后,将调度 fieldsChanged 事件。



实现
    public function get fields():Array
    public function set fields(value:Array):void

另请参见

unique属性 
unique:Boolean  [读写]

指示排序是否应是唯一的。如果字段属性中列出的字段指定的任何值或组合值导致不确定或非唯一的排序顺序,则唯一排序会失败;也就是说,在两个或多个项目具有相同排序字段值时会出现此情况。

默认值为 false.



实现
    public function get unique():Boolean
    public function set unique(value:Boolean):void
构造函数详细信息
Sort()构造函数
public function Sort()

构造函数。

创建一个不带字段集和自定义比较运算符的新 Sort。

方法详细信息
findItem()方法
public function findItem(items:Array, values:Object, mode:String, returnInsertionIndex:Boolean = false, compareFunction:Function = null):int

查找指定的数组内的指定对象(或插入点 — 如有要求)。如果找到,则返回其索引;如果未找到,则返回 -1。ListCollectionView 类的 findxxx() 方法使用此方法查找所需项目;一般来说,与 findItem() 相比,使用这些函数更易于在基于 ListCollectionView 的对象中查找数据。您可以在写入支持排序的类(如新的 ICollectionView 实现)时直接调用 findItem() 方法。

参数

items:Array — 要在其中进行搜索的 Array。
 
values:Object — 包含要查找的属性(或要查找的对象本身)的对象。此对象必须包含字段名/值对,其中的字段名是 SortFields 属性指定的字段的名称,其顺序与在此属性中使用的顺序相同。您不必指定 SortFields 属性中的所有字段,但不得在顺序中跳跃指定。因此,如果 SortFields 属性列出了三个字段,则可以指定此参数中的第一个和第二个字段,但不能仅指定第一个和第三个字段。
 
mode:String — 包含要执行的查找类型的字符串。有效值为 到
  • ANY_INDEX_MODE
  • 返回对这些值有效的任何位置。
  • FIRST_INDEX_MODE
  • 返回这些值第一次出现的位置。
  • LAST_INDEX_MODE
  • 返回指定的值最后一次出现的位置。
 
returnInsertionIndex:Boolean (default = false) — 如果该方法找不到由 values 参数标识的项目,并且此参数为 true,则 findItem() 方法将返回这些值的插入点,也就是排序顺序中应插入此项目的点。
 
compareFunction:Function (default = null) — 用于查找该项目的比较运算符函数。如果没有指定此参数,该函数将使用由 Sort 实例的 compareFunction 属性确定的函数,传入由值对象和当前 SortFields 确定的字段数组。

返回
int — int,找到的项目在数组中的索引。如果 returnInsertionIndex 参数为 false 并且找不到项目,则返回 -1。如果 returnInsertionIndex 参数为 true 并且找不到项目,则返回已排序数组中将插入这些值的点的索引。
propertyAffectsSort()方法 
public function propertyAffectsSort(property:String):Boolean

返回表明指定的属性是否用于控制排序的布尔值。如果排序使用自定义比较运算符,则函数无法确定确切的答案;在这种情况下,始终返回 true

参数

property:String — 要测试的字段的名称。

返回
Boolean — 该属性值是否会影响排序结果。如果排序使用默认的 compareFunction,并且 property 参数指定了排序字段,则返回 true。如果排序或任何 SortField 使用自定义比较运算符,则无法进行判断,因此返回 true
reverse()方法 
public function reverse():void

查看所有 SortFields 并对其调用 reverse()。如果该字段原来为降序排序,则现在它将按升序排序,反之亦然。

注意:修改 SortFields 时不会自动更新 ICollectionView;而调用 refresh() 方法可更新此视图。

sort()方法 
public function sort(items:Array):void

对指定的数组(不是副本)应用当前排序。要防止修改数组,请创建一个副本并在 items 参数中使用该副本。

Flex ICollectionView 实现自动调用 sort 方法并确保对基础数据的副本执行排序。

参数

items:Array — 要排序的项目的数组。

常量详细信息
ANY_INDEX_MODE常量
public static const ANY_INDEX_MODE:String = "any"

执行查找时返回任何匹配项的索引。

FIRST_INDEX_MODE常量 
public static const FIRST_INDEX_MODE:String = "first"

执行查找时返回第一个匹配项的索引。

LAST_INDEX_MODE常量 
public static const LAST_INDEX_MODE:String = "last"

执行查找时返回最后一个匹配项的索引。