Как использовать SortField для числовой сортировки данных в Flex / ActionScript?

Из документации:

Конструктор SortField ()

public function SortField(name:String = null, caseInsensitive:Boolean = false, descending:Boolean = false, numeric:Object = null)

Меня запутала последняя часть - numeric:Object = null.

Вот моя функция:

private function createXMLDataProvider():XMLListCollection{
    var sort:Sort = new Sort();
    sort.fields = [new SortField("@sortorder",true,false,true), new SortField("@label")];
    var searchTypesCollection:XMLListCollection = 
        new XMLListCollection(getAssociations(_appData.searchTypes, "category", searchType));
    searchTypesCollection.sort = sort;
    searchTypesCollection.refresh();
    return searchTypesCollection;
}

В этой строке:

sort.fields = [new SortField("@sortorder",true,false,true), new SortField("@label")];

Первое поле SortField - это число, но сравнивается как текст. Что я должен написать там, где это правда?

Также из документации:

Указывает, что если сортируемое поле содержит числовые значения (number / int / uint) или строковые представления числовых значений, компаратор использует числовое сравнение. Если это свойство имеет значение false, поля со строковыми представлениями чисел сортируются с использованием сравнения строк, поэтому 100 предшествует 99, поскольку «1» является более низким строковым значением, чем «9». Если это свойство имеет значение null, первый элемент данных подвергается самоанализу, чтобы определить, является ли он числом или строкой, и сортировка продолжается на основе этого самоанализа.

Значение по умолчанию неверно.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
7 937
2

Ответы 2

Посмотрите здесь пример сортировки XMLListCollection:

http://blog.flexexamples.com/2007/08/05/sorting-an-arraycollection-using-the-sortfield-and-sort-classes/

Если вы прокрутите вниз до комментария Вивека, там есть пример и следующий комментарий от Питера деХаана. Похоже, он просто опускает свойство caseInsensitive вместо того, чтобы явно указывать его в конструкторе, например:

var sortField:SortField = new SortField(value);
sortField.numeric = true;
sortField.descending = true;

var sort:Sort = new Sort();
sort.fields = [sortField];
xmlListColl.sort = sort;
return xmlListColl.refresh();

Надеюсь, это поможет! Между прочим, для числового свойства верно значение true - я не уверен, почему оно принимает Object; похоже, что в Flex 2 это было логическое значение, а в Gumbo это все еще объект, хотя в документацию Gumbo была добавлена ​​следующая строка:

When this property is modified, it dispatches the numericChanged event.

Возможно, это ключ к разгадке? Тем не менее, логическое значение - это нормально, да.

Я просто догадываюсь, но поля caseInsensitive и numeric кажутся мне выбором «или-или», то есть, если вы установите caseInsensitive на true, нет никакого реального смысла в настройке numeric, и наоборот. Попробуйте изменить приведенную выше строку следующим образом и посмотрите, работает ли она таким образом.

sort.fields = [new SortField("@sortorder",false,false,true), new SortField("@label")];

Другие вопросы по теме