ArrayCollection удаление сортировки - PullRequest
3 голосов
/ 04 августа 2009

После применения числовой сортировки к моему провайдеру данных (Array Collection) я не могу изменить порядок элементов с помощью списка плиток. Нужно ли удалять сортировку из arrayCollection. Если так, то это просто случай установки collection.sort = null?

var sortField:SortField=new SortField();
sortField.name="order";
sortField.numeric=true;
var sort:Sort=new Sort();
sort.fields=[sortField];

Ответы [ 3 ]

4 голосов
/ 04 августа 2009

Установка сортировки в null действительно должна удалить сортировку для коллекции. Возможно, вам придется выполнить необязательное обновление ().

1 голос
/ 21 июля 2011

Я тоже поймал эту проблему, нашел твой вопрос, но я так и не решил его, как предложил Кристоф.

Поработав некоторое время, я нашел один способ избежать упомянутых вами проблем.

Просто используйте вспомогательную коллекцию ArrayCollection, чтобы выполнить сортировку . В любом случае, ваш экземпляр Sort кажется временным (вы хотите его удалить), так почему бы не использовать временную коллекцию ArrayCollection?

Вот как выглядел мой код:

// myArrayCollection is the one to sort

// Create the sorter
var alphabeticSort:ISort = new Sort();
var sortfieldFirstName:ISortField = new SortField("firstName",true);
var sortfieldLastName:ISortField = new SortField("lastName",true);
alphabeticSort.fields = [sortfieldFirstName, sortfieldLastName];

// Copy myArrayCollection to aux
var aux:ArrayCollection = new ArrayCollection();
while (myArrayCollection.length > 0) {
    aux.addItem(myArrayCollection.removeItemAt(0));
}

// Sort the aux
var previousSort:ISort = aux.sort;
aux.sort = alphabeticSort;
aux.refresh();
aux.sort = previousSort;

// Copy aux to myArrayCollection
var auxLength:int = aux.length;
while (auxLength > 0) {
    myArrayCollection.addItemAt(aux.removeItemAt(auxLength - 1), 0);
    auxLength--;
}

Это не самый лучший код, у него есть несколько странных хаков, таких как auxLength вместо aux.length (этот дал мне исключение в диапазоне -1 массива), но по крайней мере это решило мою проблему.

1 голос
/ 14 октября 2009

Источник

Adobe Flex - сортировка коллекции ArrayCollection по дате

/**
* @params data:Array
* @return dataCollection:Array
**/
private function orderByPeriod(data:Array):Array
{
 var dataCollection:ArrayCollection = new ArrayCollection(data);//Convert Array to ArrayCollection to perform sort function

 var dataSortField:SortField = new SortField();
 dataSortField.name = "period"; //Assign the sort field to the field that holds the date string

 var numericDataSort:Sort = new Sort();
 numericDataSort.fields = [dataSortField];
 dataCollection.sort = numericDataSort;
 dataCollection.refresh();
 return dataCollection.toArray();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...