用于 Adobe® Flash® Platform 的 ActionScript® 3.0 参考
主页  |  隐藏包列表和类列表 |   |   |  新增内容  |  索引  |  附录  |  为什么显示为英语?
过滤条件: 正在从服务器检索数据...
正在从服务器检索数据...
mx.collections 

Sort  - AS3 Flex

mx.collections
public class Sort
继承Sort Inheritance EventDispatcher Inheritance Object
实现 ISort

语言版本: ActionScript 3.0
产品版本: Flex 3
运行时版本: Flash Player 9, AIR 1.1


从 Flex 4.5 开始,Adobe 建议您使用 spark.collections.Sort 类来替代此类。

提供在现有视图上建立排序所需的排序信息(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 实现将先检索远程位置的所有项目,然后再执行排序。如果要对排序后的列表使用分页,请在检索数据之前对远程集合应用排序。

默认情况下,此 Sort 类不会提供正确的特定于语言的字符串排序。对于这种类型的排序,请参阅 spark.collections.Sortspark.collections.SortField 类。

MXML 语法expanded隐藏 MXML 语法

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

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

In case items have inconsistent data types or items have complex data types, the use of the default built-in compare functions is not recommended. Inconsistent sorting results may occur in such cases. To avoid such problem, provide a custom compare function and/or make the item types consistent.

Just like any other AdvancedStyleClient-based classes, the Sort and SortField classes do not have a parent-child relationship in terms of event handling. Locale changes in a Sort instance are not dispatched to its SortField instances automatically. The only exceptional case is the internal default SortField instance used when no explicit fields are provided. In this case, the internal default SortField instance follows the locale style that the owner Sort instance has.

默认 MXML 属性fields

相关 API 元素



公共属性
 属性由以下参数定义
  compareFunction : Function
用于在排序时比较项目的方法。
Sort
 Inheritedconstructor : Object
对类对象或给定对象实例的构造函数的引用。
Object
  fields : Array
指定要比较的字段的 ISortField 对象 Array。
Sort
  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
  
检查 fields 数组,对数组中每个 ISortField 对象调用 reverse()。
Sort
 Inherited
设置循环操作动态属性的可用性。
Object
  
sort(items:Array):void
对指定的数组(不是副本)应用当前排序。
Sort
 Inherited
返回此对象的字符串表示形式,其格式设置遵守区域设置特定的约定。
Object
 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

语言版本: ActionScript 3.0
产品版本: Flex 3
运行时版本: Flash Player 9, AIR 1.1

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

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


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

此函数必须返回以下值:

  • -1,如果在已排序序列中 Object a 应显示在 Object b 之前。
  • 0,如果 Object a 等于 Object b
  • 1,如果在已排序序列中 Object a 应显示在 Object b 之后。

要返回到内部比较函数,请将此值设置为 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;
        }
      

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

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



实现
    public function get compareFunction():Function
    public function set compareFunction(value:Function):void

fields

属性 
fields:Array

语言版本: ActionScript 3.0
产品版本: Flex 3
运行时版本: Flash Player 9, AIR 1.1

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

默认值为 null。

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



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

相关 API 元素

unique

属性 
unique:Boolean

语言版本: ActionScript 3.0
产品版本: Flex 3
运行时版本: Flash Player 9, AIR 1.1

指示排序是否应是唯一的。如果字段属性中列出的字段指定的任何值或组合值导致不确定或非唯一的排序顺序,则唯一排序会失败;也就是说,在两个或多个项目具有相同排序字段值时会出现此情况。如果排序不唯一,将引发错误。仅当显式指定排序字段时,排序逻辑才使用该 unique 属性值。如果未显式指定排序字段,则具有相同值元素时也不会引发错误。

默认值为 false。



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

Sort

()构造函数
public function Sort()

语言版本: ActionScript 3.0
产品版本: Flex 3
运行时版本: Flash Player 9, AIR 1.1

构造函数。

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

方法详细信息

findItem

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

语言版本: ActionScript 3.0
产品版本: Flex 3
运行时版本: Flash Player 9, AIR 1.1

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

参数

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

返回
int — int,找到的项目在数组中的索引。如果 returnInsertionIndex 参数为 false 并且找不到项目,则返回 -1。如果 returnInsertionIndex 参数为 true 并且找不到项目,则返回已排序数组中将插入这些值的点的索引。

propertyAffectsSort

()方法 
public function propertyAffectsSort(property:String):Boolean

语言版本: ActionScript 3.0
产品版本: Flex 3
运行时版本: Flash Player 9, AIR 1.1

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

参数

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

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

reverse

()方法 
public function reverse():void

语言版本: ActionScript 3.0
产品版本: Flex 3
运行时版本: Flash Player 9, AIR 1.1

检查 fields 数组,对数组中每个 ISortField 对象调用 reverse()。如果该字段原来为降序排序,则现在它将按升序排序,反之亦然。

注意:修改 fields 数组中的对象时不会自动更新 ICollectionView;而调用 refresh() 方法可更新此视图。

sort

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

语言版本: ActionScript 3.0
产品版本: Flex 3
运行时版本: Flash Player 9, AIR 1.1

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

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

参数

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

常量详细信息

ANY_INDEX_MODE

常量
public static const ANY_INDEX_MODE:String = "any"

语言版本: ActionScript 3.0
产品版本: Flex 3
运行时版本: Flash Player 9, AIR 1.1

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

FIRST_INDEX_MODE

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

语言版本: ActionScript 3.0
产品版本: Flex 3
运行时版本: Flash Player 9, AIR 1.1

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

LAST_INDEX_MODE

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

语言版本: ActionScript 3.0
产品版本: Flex 3
运行时版本: Flash Player 9, AIR 1.1

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





[ X ]为什么显示为英语?
《ActionScript 3.0 参考》中的内容以英语显示

《ActionScript 3.0 参考》中的部分内容未翻译成所有语言。当某个语言元素未翻译时,将显示为英语。例如,ga.controls.HelpBox 类未翻译成任何语言。因此在简体中文版的参考中,ga.controls.HelpBox 类显示为英语。