Из документации:
Конструктор 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, первый элемент данных подвергается самоанализу, чтобы определить, является ли он числом или строкой, и сортировка продолжается на основе этого самоанализа.
Значение по умолчанию неверно.





Посмотрите здесь пример сортировки XMLListCollection:
Если вы прокрутите вниз до комментария Вивека, там есть пример и следующий комментарий от Питера деХаана. Похоже, он просто опускает свойство 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")];