对我的dataprovider(Array Collection)应用数字排序后,我无法通过tilelist重新排序项目。我是否需要从arrayCollection中删除排序。如果是这样,是否只是设置collection.sort = null?
的情况var sortField:SortField=new SortField();
sortField.name="order";
sortField.numeric=true;
var sort:Sort=new Sort();
sort.fields=[sortField];
答案 0 :(得分:4)
将sort设置为null确实应该删除集合的排序。您可能需要执行可选的refresh()。
答案 1 :(得分:1)
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(); }
答案 2 :(得分:1)
我也遇到了这个问题,我找到了你的问题,而且我仍然没有像Christophe所说的那样解决它。
经过一段时间的苦难之后,我发现了一种避免你提到的问题的方法。
只需使用辅助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数组范围异常),但至少它解决了我的问题。