2009-01-14 6 views
2

De la documentation:Comment utiliser SortField pour trier mes données numériquement dans Flex/ActionScript?

SortField() constructeur

public function SortField(name:String = null, caseInsensitive:Boolean = false, descending:Boolean = false, numeric:Object = null) 

Je suis confus sur la dernière partie - numeric:Object = null.

Voici ma fonction:

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

Sur cette ligne:

sort.fields = [new SortField("@sortorder",true,false,true), new SortField("@label")]; 

Le premier est un nombre SortField mais est comparé comme il est un texte. Que devrais-je mettre là où cela est vrai?

également à partir de la documentation:

Indique que si le champ trié contient des valeurs numériques (nombre/int/uint) ou des représentations de chaîne de valeurs numériques, le comparateur à utiliser une comparaison numérique. Si cette propriété est fausse, les champs avec des représentations de chaîne de nombres sont triés en utilisant la comparaison de chaînes, donc 100 précède 99, car "1" est une valeur de chaîne inférieure à "9". Si cette propriété est null, le premier élément de données est introspecté pour voir s'il s'agit d'un nombre ou d'une chaîne et le tri se déroule en fonction de cette introspection.

La valeur par défaut est false.

Répondre

1

Jetez un oeil ici pour un exemple de tri d'un XMLListCollection:

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

Si vous faites défiler vers le bas au commentaire de Vivek, il y a un exemple et un suivi commentaire de Peter deHaan. On dirait qu'il est tout simplement en omettant la propriété caseInsensitive, au lieu de définir explicitement dans le constructeur, .: par exemple

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(); 

Hope that helps! Incidemment, true est correct pour la propriété numérique - je ne suis pas sûr de savoir pourquoi il accepte Object; il ressemble dans Flex 2, il était une valeur booléenne, et Gumbo, il est encore un objet, bien que la ligne suivante a été ajoutée aux Gumbo docs:

Lorsque cette propriété est modifiée, il distribue l'événement numericChanged .

Un indice, peut-être? Néanmoins, une valeur booléenne est correcte, oui.

0

Je devine juste ici, mais caseInsensitive et numeric champs semblent comme un autre ou choix pour moi, qui est, si vous définissez caseInsensitive à true, il n'y a pas de véritable point fixeraient également numeric, et vice versa. Essayez de modifier la ligne ci-dessus comme suit et voyez si cela fonctionne de cette façon.

sort.fields = [new SortField("@sortorder",false,false,true), new SortField("@label")]; 
Questions connexes