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

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

Конструктор 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 - это число, но сравнивается как текст. Что я должен положить туда, где написано «правда»?

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

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

Значением по умолчанию является false.

Ответы [ 2 ]

1 голос
/ 14 января 2009

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

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

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

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 была добавлена ​​следующая строка:

Когда это свойство изменяется, оно отправляет событие numericChanged.

Может быть, ключ к разгадке? Тем не менее, логическое значение в порядке, да.

0 голосов
/ 14 января 2009

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

sort.fields = [new SortField("@sortorder",false,false,true), new SortField("@label")];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...