包 | mx.collections |
类 | public class Sort |
继承 | Sort EventDispatcher 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();
也有集合中包含简单项目(如 String
、Date
和 Boolean
等)的情形。在这种情况下,可直接对简单类型应用排序。在构造简单项目的排序时,请使用一个排序字段,并在 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.Sort
和 spark.collections.SortField
类。
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 | ||
constructor : Object
对类对象或给定对象实例的构造函数的引用。 | Object | ||
fields : Array
指定要比较的字段的 ISortField 对象 Array。 | Sort | ||
unique : Boolean
指示排序是否应是唯一的。 | Sort |
方法 | 由以下参数定义 | ||
---|---|---|---|
Sort()
构造函数。 | Sort | ||
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
使用 EventDispatcher 对象注册事件侦听器对象,以使侦听器能够接收事件通知。 | EventDispatcher | ||
将事件调度到事件流中。 | EventDispatcher | ||
findItem(items:Array, values:Object, mode:String, returnInsertionIndex:Boolean = false, compareFunction:Function = null):int
查找指定的数组内的指定对象(或插入点 — 如有要求)。如果找到,则返回其索引;如果未找到,则返回 -1。 | Sort | ||
检查 EventDispatcher 对象是否为特定事件类型注册了任何侦听器。 | EventDispatcher | ||
表示对象是否已经定义了指定的属性。 | Object | ||
表示 Object 类的实例是否在指定为参数的对象的原型链中。 | Object | ||
返回表明指定的属性是否用于控制排序的布尔值。 | Sort | ||
表示指定的属性是否存在、是否可枚举。 | Object | ||
从 EventDispatcher 对象中删除侦听器。 | EventDispatcher | ||
检查 fields 数组,对数组中每个 ISortField 对象调用 reverse()。 | Sort | ||
设置循环操作动态属性的可用性。 | Object | ||
对指定的数组(不是副本)应用当前排序。 | Sort | ||
返回此对象的字符串表示形式,其格式设置遵守区域设置特定的约定。 | Object | ||
返回指定对象的字符串表示形式。 | Object | ||
返回指定对象的原始值。 | Object | ||
检查是否用此 EventDispatcher 对象或其任何祖代为指定事件类型注册了事件侦听器。 | 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 — 包含要执行的查找类型的字符串。有效值为:
| |||||||
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 | () | 方法 |
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 |
执行查找时返回最后一个匹配项的索引。
Tue Jun 12 2018, 11:04 AM Z