Пакет | spark.collections |
Класс | public class Sort |
Наследование | Sort AdvancedStyleClient EventDispatcher Object |
Реализует | ISort |
Язык версии: | ActionScript 3.0 |
Версия продукта: | Flex 4.5 |
Версии среды выполнения: | Flash Player 10.1, AIR 2.5 |
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:ISort = new Sort();
// Set the sort field; sort on the last name first, first name second.
var sortfieldLastName:ISortField = new SortField("last",true);
var sortfieldFirstName:ISortField = new SortField("first",true);
// Set the locale style to "en-US" to cause the strings
// to be ordered according to the rules for English as used in the USA.
sortfieldLastName.setStyle("locale","en-US");
sortfieldFirstName.setStyle("locale","en-US");
sort.fields = [sortfieldLastName, sortfieldFirstName];
// Assign the Sort object to the view.
col.sort = sort;
// Apply the sort to the collection.
col.refresh();
Возможны ситуации, в которых коллекция содержит простые элементы, подобные String
, Date
, Boolean
и т. д. В этом случае следует применять сортировку непосредственно к простому типу. При создании сортировки для простых элементов следует использовать отдельное поле сортировки и указать (первый) параметр name
как null
в конструкторе объектов SortField. Например:
import mx.collections.ArrayCollection;
import spark.collections.Sort;
import spark.collections.SortField;
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.
var sortfield:SortField = new SortField("null",true);
// Set the locale style to "en-US" to set the language for the sort.
sortfield.setStyle("locale","en-US");
sort.fields = [sortfield];
col.sort = sort;
col.refresh();
В реализациях Flex интерфейса ICollectionView
все элементы извлекаются из удаленного местоположения перед выполнением сортировки. При использовании подкачки страниц с сортированным списком к удаленной коллекции перед извлечением данных следует применить сортировку.
Сравнение по умолчанию, выполняемое с помощью класса SortField
, обеспечивает правильную языковую сортировку строк. Для выбора языка необходимо установить стиль locale в экземпляре класса одним из следующих способов:
- С использованием класса в объявлении MXML и наследованием локали из документа, содержащего объявление. Пример:
<fx:Declarations> <s:SortField id="sf" /> </fx:Declarations>
<fx:Declarations> <s:SortField id="sf_SimplifiedChinese" locale="zh-Hans-CN" /> </fx:Declarations>
setStyle
, например sf.setStyle("locale", "zh-Hans-CN")
.
UIComponent
путем вызова метода addStyleClient()
UIComponent.
The <s:Sort>
tag has the following attributes:
<s:Sort Properties compareFunction="Internal compare function" fields="null" unique="false | true" />
In case items have inconsistent data types or items have complex data types, use of default built-in compare functions is not desired. Inconsistent sort result may occur in such cases. To avoid such problem, provide custom compare function and/or make item types consistent.
Свойство MXML по умолчаниюfields
Связанные элементы API
Свойство | Определено | ||
---|---|---|---|
className : String [только для чтения]
Имя класса компонента. | AdvancedStyleClient | ||
compareFunction : Function
Метод, используемый для сравнения элементов при сортировке. | Sort | ||
constructor : Object
Ссылка на объект класса или функцию конструктора для данного экземпляра объекта. | Object | ||
fields : Array
Массив объектов ISortField, указывающий поля для сравнения. | Sort | ||
id : String
Идентификатор компонента. | AdvancedStyleClient | ||
inheritingStyles : Object
Объект, содержащий стили наследования для экземпляра клиента с невизуальным стилем. | AdvancedStyleClient | ||
moduleFactory : IFlexModuleFactory
Фабрика модуля, используемая в качестве контекста для поиска менеджера стилей, управляющего стилями в этом экземпляре клиента с невизуальным стилем. | AdvancedStyleClient | ||
nonInheritingStyles : Object
Начало цепочки этого компонента с ненаследуемыми стилями. | AdvancedStyleClient | ||
styleDeclaration : CSSStyleDeclaration
Объявление стиля, которое содержит действующие стили, объявленные этим объектом. | AdvancedStyleClient | ||
styleManager : IStyleManager2 [только для чтения]
Возвращает экземпляр StyleManager, используемый этим компонентом. | AdvancedStyleClient | ||
styleName : Object
Источник значений стиля данного объекта. | AdvancedStyleClient | ||
styleParent : IAdvancedStyleClient
Вышестоящий узел компонента используется для анализа нижестоящих селекторов. | AdvancedStyleClient | ||
unique : Boolean
Указывает, должна ли сортировка быть уникальной. | Sort |
Метод | Определено | ||
---|---|---|---|
Sort()
Конструктор. | Sort | ||
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Регистрирует объект прослушивателя события на объекте EventDispatcher для получения прослушивателем уведомления о событии. | EventDispatcher | ||
Удаляет свойство style для экземпляра компонента. | AdvancedStyleClient | ||
Посылает событие в поток событий. | EventDispatcher | ||
findItem(items:Array, values:Object, mode:String, returnInsertionIndex:Boolean = false, compareFunction:Function = null):int
Поиск указанного объекта в пределах указанного массива (или места вставки при запросе); при обнаружении возвращается индекс, в противном случае – -1. | Sort | ||
Возвращает массив объектов CSSStyleDeclaration для селектора типа, применяемого к этому компоненту, или null, если массив не существует. | AdvancedStyleClient | ||
Получает свойство style, которое было установлено в любом месте в пределах цепочки поиска стиля этого компонента. | AdvancedStyleClient | ||
Возвращает true, если для currentCSSState не указано значение null. | AdvancedStyleClient | ||
Проверяет, имеет ли объект EventDispatcher прослушиватели, зарегистрированные для определенного типа события. | EventDispatcher | ||
Показывает, определено ли заданное свойство для объекта. | Object | ||
Инициализированный метод вызывается, когда этот класс или класс, расширяющий этот класс, используются в объявлении MXML. | AdvancedStyleClient | ||
Показывает, есть ли экземпляр класса Object в цепи прототипов объекта, заданного в качестве параметра. | Object | ||
Возвращает значение true, если cssState совпадает с currentCSSState. | AdvancedStyleClient | ||
Определяет, совпадает ли этот экземпляр с данным типом (или является его подклассом). | AdvancedStyleClient | ||
Применяет изменения стиля к нижестоящим элементам этого экземпляра клиента стиля. | AdvancedStyleClient | ||
Возвращает значение, показывающее используется ли указанное свойство для управления сортировкой. | Sort | ||
Показывает наличие заданного свойства и его перечисляемость. | Object | ||
Обеспечивает настройку внутренних значений кэша стиля для функционирования метода getStyle(). | AdvancedStyleClient | ||
Обеспечивает регистрацию EffectManager в качестве одного из прослушивателей события для каждого события эффекта. | AdvancedStyleClient | ||
Удаляет прослушиватель из объекта EventDispatcher. | EventDispatcher | ||
Проходит через массив fields и вызывает reverse() для каждого объекта ISortField в массиве. | Sort | ||
Задает доступность динамического свойства для операций цикла. | Object | ||
Задает свойство style для экземпляра компонента. | AdvancedStyleClient | ||
Применяет текущую сортировку к указанному массиву (не копии). | Sort | ||
Обеспечивает обнаружение изменений в свойствах стиля. | AdvancedStyleClient | ||
Метод stylesInitialized() вызывается программой Flex при первой инициализации стиля компонента. | AdvancedStyleClient | ||
Возвращает строковое представление этого объекта, отформатированного в соответствии со стандартами, принятыми для данной локали. | Object | ||
Возвращает строковое представление заданного объекта. | Object | ||
Возвращает элементарное значение заданного объекта. | Object | ||
Проверяет, зарегистрирован ли прослушиватель события для указанного типа события с данным объектом EventDispatcher или любым его предшественником. | EventDispatcher |
Стили являются либо общими, либо связанными с определенной темой. Если стиль общий, он может использоваться с любой темой. Если стиль связан с определенной темой, он может использоваться, только если ваше приложение использует ее.
Стиль | Описание | Определено | ||
---|---|---|---|---|
locale | Тип: String Наследование CSS: Да Язык версии: ActionScript 3.0 Версия продукта: Flex 4.5 Версии среды выполнения: Flash10.1, AIR 2.5 Идентификатор локали, который определяет язык, область, сценарий и, дополнительно, другие связанные теги и ключи. Синтаксис этого идентификатора должен соответствовать синтаксису, определенному техническим стандартом Юникод № 35 (например, en-US, de-DE, zh-Hans-CN). В приложениях для браузера стандартная локаль основана на языковых параметрах браузера. Обратите внимание, что используется не язык интерфейса браузера, который устанавливается в Javascript, а список предпочтительных локалей для веб-страниц, выбранных пользователем в настройках браузера. В приложениях AIR стандартная локаль интерфейса основана на системных установках пользователя. Дополнительно | Sort |
Константа | Определено | ||
---|---|---|---|
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 4.5 |
Версии среды выполнения: | Flash Player 10.1, AIR 1.5 |
Метод, используемый для сравнения элементов при сортировке. При указании этого свойства Flex игнорирует любые свойства compareFunction
, которые указаны в объектах ISortField
, используемых в этом классе.
Функция сравнения должна иметь следующую подпись:
function [name](a:Object, b:Object, fields:Array = null):int
Эта функция должна возвращать следующее значение:
- -1, если в отсортированной последовательности
объект А
должен предшествоватьобъекту B
. - 0, если
объект А
совпадает собъектом B
. - 1, если в отсортированной последовательности
объект А
должен следовать заобъектом 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 4.5 |
Версии среды выполнения: | Flash Player 10.1, AIR 2.5 |
Массив
объектов ISortField
, указывающих поля для сравнения. Порядок объектов ISortField в массиве определяет приоритетный порядок полей при сортировке. Устройство сравнения сортировки по умолчанию проверяет поля сортировки в порядке массива, пока не определит порядок сортировки для двух сравниваемых полей.
Значением по умолчанию является null.
Это свойство можно использовать в качестве источника для связывания данных. При изменении этого свойства отправляется событие fieldsChanged
.
Реализация
public function get fields():Array
public function set fields(value:Array):void
Связанные элементы API
unique | свойство |
unique:Boolean
Язык версии: | ActionScript 3.0 |
Версия продукта: | Flex 4.5 |
Версии среды выполнения: | Flash Player 10.1, AIR 1.5 |
Указывает, должна ли сортировка быть уникальной. Уникальная сортировка завершается ошибкой, если какое-либо значение или объединенное значение, указанные в полях, перечисленных в свойствах полей, приводят к неопределенной или неуникальной последовательности сортировки, т. е. если два и более элемента имеют идентичные значения полей сортировки. Если сортировка не является уникальной, вызывается ошибка. Логика сортировки использует значение свойства unique
только в случае, когда поля сортировки указаны явным образом. Если ни одно из полей сортировки не указано явным образом, ошибка не выводится даже при наличии элементов с идентичными значениями.
Значением по умолчанию является false.
Реализация
public function get unique():Boolean
public function set unique(value:Boolean):void
Sort | () | Конструктор |
public function Sort()
Язык версии: | ActionScript 3.0 |
Версия продукта: | Flex 4.5 |
Версии среды выполнения: | Flash Player 10.1, AIR 2.5 |
Конструктор.
Создает новую сортировку без установленных полей и пользовательского устройства сравнения.
findItem | () | метод |
public function findItem(items:Array, values:Object, mode:String, returnInsertionIndex:Boolean = false, compareFunction:Function = null):int
Язык версии: | ActionScript 3.0 |
Версия продукта: | Flex 4.5 |
Версии среды выполнения: | Flash Player 10.1, AIR 2.5 |
Поиск указанного объекта в пределах определенного массива (или места вставки при запросе); при обнаружении возвращается индекс, в противном случае – -1. Используемые в классе ListCollectionView
методы findxxx()
применяют этот способ для определения запрашиваемого элемента. Как правило, проще использовать эти функции вместо findItem()
для поиска данных в объектах на основе ListCollectionView
. Метод findItem()
можно вызвать непосредственно при создании класса, например новой реализации ICollectionView
, который поддерживает сортировку. Перед вызовом этой функции необходимо выполнить сортировку входного массива элементов. В противном случае эта функция не сможет правильно определить указанное значение.
Параметры
items:Array — Массив, в пределах которого выполняется поиск.
| |||||||
values:Object — Объект, содержащий свойства для поиска (или сам объект для поиска). Объект должен состоять из пар «имя/значение поля», в которых имена полей определяются свойством fields в порядке их использования в этом свойстве. Необязательно перечислять все поля свойства fields , однако поле не может быть пропущено в последовательности. Поэтому если в свойстве fields перечисляются три поля, то можно указать только первое и второе поля, но нельзя указать первое и третье, пропустив второе.
| |||||||
mode:String — Строка, содержащая тип нахождения для выполнения. Допустимые значения:
| |||||||
returnInsertionIndex:Boolean (default = false ) — Если метод не находит элемент, идентифицируемый параметром values , и этот параметр равен true , метод findItem() возвращает место вставки для значений, которое в сортированной последовательности является точкой вставки элемента.
| |||||||
compareFunction:Function (default = null ) — функция устройства сравнения для использования при нахождении элемента. Если этот параметр не определен или указано значение null , функция findItem() использует функцию compare, определенную ISort в свойстве compareFunction экземпляра, с передачей данных в массив полей, которые определены объектом значений и текущим SortFields . Если указано ненулевое значение, функция findItem() использует его как функцию compare. Для функции, передаваемой как compareFunction , необходимо указать следующую подпись: function myCompareFunction(a:Object, b:Object):int . Обратите внимание, что в отличие от функции compare для свойства ISort.compareFunction() отсутствует третий аргумент.
|
int — int Индекс в массиве найденного элемента. Если параметр returnInsertionIndex равен false и элемент не найден, возвращает -1. Если параметр returnInsertionIndex равен true и элемент не найден, возвращает индекс точки в сортированном массиве, где следует вставить значения.
|
propertyAffectsSort | () | метод |
public function propertyAffectsSort(property:String):Boolean
Язык версии: | ActionScript 3.0 |
Версия продукта: | Flex 4.5 |
Версии среды выполнения: | Flash Player 10.1, AIR 2.5 |
Возвращает значение, показывающее используется ли указанное свойство для управления сортировкой. Если сортировка использует пользовательское средство сравнения, то функция не может определить окончательный ответ и всегда возвращает значение true
.
Параметры
property:String — Имя тестируемого поля.
|
Boolean — Может ли значение свойства влиять на результат сортировки. Если при сортировке используется функция compareFunction, установленная по умолчанию, метод возвращает значение true , если параметр property определяет поле сортировки. Если сортировка или любой ISortField использует неизвестное пользовательское устройство сравнения, возвращается значение true .
|
reverse | () | метод |
public function reverse():void
Язык версии: | ActionScript 3.0 |
Версия продукта: | Flex 4.5 |
Версии среды выполнения: | Flash Player 10.1, AIR 2.5 |
Проходит через массив fields
и вызывает reverse()
для каждого объекта ISortField
в массиве. Поле по нисходящей теперь становится полем по восходящей и наоборот.
Примечание. ICollectionView
не обновляется автоматически при изменении объектов в массиве fields
; для обновления представления следует вызвать метод refresh()
.
sort | () | метод |
public function sort(items:Array):void
Язык версии: | ActionScript 3.0 |
Версия продукта: | Flex 4.5 |
Версии среды выполнения: | Flash Player 10.1, AIR 2.5 |
Применяет текущую сортировку к указанному массиву (не копии). Для предотвращения изменения массива следует создать копию в параметре items
.
Реализации ICollectionView
в Flex автоматически вызывают метод sort
и обеспечивают выполнение сортировки в копии основных данных.
Параметры
items:Array — Массив сортируемых элементов.
|
ANY_INDEX_MODE | Константа |
public static const ANY_INDEX_MODE:String = "any"
Язык версии: | ActionScript 3.0 |
Версия продукта: | Flex 4.5 |
Версии среды выполнения: | Flash Player 10.1, AIR 2.5 |
При нахождении возвращает индекс любого соответствующего элемента.
FIRST_INDEX_MODE | Константа |
public static const FIRST_INDEX_MODE:String = "first"
Язык версии: | ActionScript 3.0 |
Версия продукта: | Flex 4.5 |
Версии среды выполнения: | Flash Player 10.1, AIR 2.5 |
При выполнении поиска возвращает индекс первого совпадающего элемента.
LAST_INDEX_MODE | Константа |
public static const LAST_INDEX_MODE:String = "last"
Язык версии: | ActionScript 3.0 |
Версия продукта: | Flex 4.5 |
Версии среды выполнения: | Flash Player 10.1, AIR 2.5 |
При выполнении поиска возвращает индекс последнего совпадающего элемента.
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> <!-- Sample program for spark.collections.Sort and SortField --> <fx:Declarations> <s:Sort id="sortbyLastName_FirstName"> <s:fields> <s:SortField name="last"/> <s:SortField name="first"/> </s:fields> </s:Sort> <mx:ArrayCollection id="collection" sort="{sortbyLastName_FirstName}"> <mx:source> <fx:Object first="Anders" last="Dickerson"/> <fx:Object first="Eileen" last="Maccormick"/> <fx:Object first="Aiden" last="MacCormick"/> <fx:Object first="Steve" last="MacGregor"/> </mx:source> </mx:ArrayCollection> </fx:Declarations> <s:VGroup> <s:VGroup> <s:HGroup> <s:Label text="Input Locale ID Name: "/> <s:TextInput id="inputLocaleIDName"/> <!-- Sets the locale style on the document UI component. The SortField and Sort objects defined in the fx:Declarations section will inherit this style. --> <s:Button click="{setStyle('locale', inputLocaleIDName.text); collection.refresh()}" label="Apply"/> </s:HGroup> <s:Label text="Example: 'en-US', 'fr-FR', 'zh-CN', 'ar-SA'"/> </s:VGroup> <s:DataGrid dataProvider="{collection}" width="100%" creationComplete="{collection.refresh()}"> <s:columns> <s:ArrayList> <s:GridColumn dataField="last"/> <s:GridColumn dataField="first"/> </s:ArrayList> </s:columns> </s:DataGrid> </s:VGroup> </s:Application>
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="initApp()"> <!-- Sample program for spark.collections.Sort and SortField --> <fx:Script> <![CDATA[ import mx.collections.ArrayCollection; import spark.collections.*; [Bindable] private var collection:ArrayCollection = new ArrayCollection(); private function localeChange():void { // Sets the locale style on this application. // The SortField objects will inherit this style. setStyle('locale', inputLocaleIDName.text); collection.refresh(); } private function initApp() : void { // Add data to the collection. collection.addItem({first:"Anders", last:"Dickerson"}); collection.addItem({first:"Steve", last:"Maccormick"}); collection.addItem({first:"Aiden", last:"MacCormick"}); collection.addItem({first:"Eileen", last:"MacGregor"}); // Create the Sort instance. var sort:Sort = new Sort(); // Set the sort field; sort on the last name first, first name // second. var sortfieldLastName:SortField = new SortField("last",true); var sortfieldFirstName:SortField = new SortField("first",true); sort.fields = [sortfieldLastName, sortfieldFirstName]; // Add the sort field objects to this application's list of // style clients. This will cause the sort field objects to // inherit the locale style from this Application. addStyleClient(sortfieldLastName); addStyleClient(sortfieldFirstName); // Assign the Sort object to the view. collection.sort = sort; // Apply the sort to the collection. collection.refresh(); } ]]> </fx:Script> <s:VGroup> <s:VGroup> <s:HGroup> <s:Label text="Input Locale ID Name: "/> <s:TextInput id="inputLocaleIDName"/> <s:Button click="localeChange()" label="Apply"/> </s:HGroup> <s:Label text="Example: 'en-US', 'fr-FR', 'zh-CN', 'ar-SA'"/> </s:VGroup> <s:DataGrid dataProvider="{collection}" width="100%" creationComplete="{collection.refresh()}"> <s:columns> <s:ArrayList> <s:GridColumn dataField="last"/> <s:GridColumn dataField="first"/> </s:ArrayList> </s:columns> </s:DataGrid> </s:VGroup> </s:Application>
Tue Jun 12 2018, 11:34 AM Z