2009-08-03 10 views
3

データプロバイダ(配列コレクション)に数値ソートを適用した後、タイルリストを使用してアイテムを並べ替えることができません。 arrayCollectionからソートを削除する必要がありますか?もしそうなら、collection.sort = nullを設定するだけのケースですか?ArrayCollection削除ソート

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

答えて

4

ソートをnullに設定すると、実際にコレクションのソートが削除されるはずです。オプションのrefresh()を行う必要があるかもしれません。

+0

Hum ...実際には 'sort = null'を設定し、' ArrayCollection'を編集しようとすると例外が発生します。 'ArrayCollection.refresh()'を呼び出さない限り、これを行うと 'sort'が' null'でもデータがソートされます。私は立ち往生しています:p – nununo

+0

@nununoと同じ動作をします。あなたは何が起こっていたのか分かりましたか? –

+0

ええ、こちらと同じです。私は自分でArrayCollectionをソートしてしまいました。ラメ。 – jonnysamps

1

Source

のAdobeのFlex - 日

/** 
* @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

によってArrayCollectionのソート私もこの問題に巻き込まれた、私はあなたの質問を見つけた、と私はまだそれがクリストフのように解決しますdidntは提案する。

これをしばらく苦しんだ後、私はあなたが言及した問題を避けるための1つの方法を発見しました。

補助ArrayCollectionを使用して、並べ替えを実行するだけです。とにかく、あなたのSortインスタンスは一時的なものになっているようですが、一時的なArrayCollectionを使用しないのはなぜですか?それは代わりにaux.lengthのauxLengthのようないくつかの奇妙なハックを(この1つは私-1配列範囲の例外を与えた)持っていますが、で、それはneatestコードではありません

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

はここのように私のコードを見てみましょう少なくともそれは私の問題を解決しました。

関連する問題