包 | mx.collections |
类 | public class Sort |
继承 | Sort EventDispatcher Object |
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 实现将先检索远程位置的所有项目,然后再执行排序。如果要对排序后的列表使用分页,请在检索数据之前对远程集合应用排序。
MXML 语法隐藏 MXML 语法The <mx:Sort>
tag has the following attributes:
<mx:Sort Properties compareFunction="Internal compare function" fields="null" unique="false | true" />
默认 MXML 属性fields
另请参见
属性 | 定义方 | ||
---|---|---|---|
compareFunction : Function 用于在排序时比较项目的方法。 | Sort | ||
constructor : Object
对类对象或给定对象实例的构造函数的引用。 | Object | ||
fields : Array 指定要比较的字段的 SortField 对象 Array。 | Sort | ||
prototype : Object [静态]
对类或函数对象的原型对象的引用。 | Object | ||
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 | ||
查看所有 SortFields 并对其调用 reverse()。 | Sort | ||
设置循环操作动态属性的可用性。 | Object | ||
对指定的数组(不是副本)应用当前排序。 | Sort | ||
返回指定对象的字符串表示形式。 | 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
[读写]
用于在排序时比较项目的方法。如果指定了此属性,Flex 会忽略在此类中使用的 SortField 对象中指定的所有 compareFunction
属性。
该比较函数必须具有以下签名:
function [name](a:Object, b:Object, fields:Array = null):int
此函数必须返回以下值
a
应显示在 b
之前
a
等于 b
a
应显示在 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;
}
默认值为具有以下特征的内部比较函数:可以通过区分大小写或不区分大小写的字符串比较按升序或降序执行字符串、数字或日期比较。仅在需要自定义比较算法时指定您自己的函数。这种情况通常仅当在显示中使用计算的字段时出现。
或者,您可以通过使用 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 —
包含要执行的查找类型的字符串。有效值为 到
| |
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"
执行查找时返回最后一个匹配项的索引。