2009-08-03 13 views
3

Nach dem Anwenden einer numerischen Sortierung auf meinen Datenprovider (Array Collection), kann ich die Elemente nicht über eine Tile-Liste neu anordnen. Muss ich die Sortierung aus der arrayCollection entfernen. Wenn ja, ist es nur ein Fall von collection.sort = null?ArrayCollection Entfernen Sortierung

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

Antwort

4

Die Sortierung auf null sollte die Sortierung für die Sammlung tatsächlich entfernen. Möglicherweise müssen Sie eine optionale Aktualisierung() durchführen.

+0

Hum ... eigentlich, wenn ich 'sort = null 'und versuchen, die' ArrayCollection' zu bearbeiten, bekomme ich eine Ausnahme. Wenn ich 'ArrayCollection.refresh()' nicht aufruft, aber wenn ich das tue, obwohl "sort" "null" ist, werden die Daten sortiert. Ich stecke fest: p – nununo

+0

Ich bekomme das gleiche Verhalten wie du @nununo. Hast du herausgefunden, was passiert ist? –

+0

Ya, das gleiche hier. Ich habe gerade die ArrayCollection selbst sortiert. Lame. – jonnysamps

1

Source

Adobe Flex - Sortierung eine Arraycollection von Datum

/** 
* @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(); 
} 
1

ich mit diesem Problem zu verfing, fand ich Ihre Frage, und ich kann es immer noch nur knapp sein Ziel zu bekommen, wie Christophe gelöst empfohlen.

Nachdem ich eine Zeit lang damit zu leiden hatte, entdeckte ich einen Weg, die von Ihnen erwähnten Probleme zu vermeiden.

Verwenden Sie einfach eine zusätzliche ArrayCollection für die Sortierung. Wie dem auch sei, Ihre Sort-Instanz scheint nur temporär zu sein (Sie möchten es durchgehen), warum also nicht eine temporäre ArrayCollection verwenden?

Hier ist, wie mein Code aussah:

// 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--; 
} 

Es ist nicht das sauberste Code, es einige seltsame Hacks wie auxLength statt aux.length hat (dieses hat mir -1 Array-Bereich Ausnahme), aber Wenigstens hat es mein Problem gelöst.

Verwandte Themen