ArrayCollection
リストのdataProviderとして機能するを持っています。
コレクションには、次のタイプのオブジェクトが格納されますMyObject
。
public class MyObject {
public var myMap:Dictionary;
}
myMap
キーと値のペアを格納します。キーはinteger
で、値は文字列です。
これまでのところ、制約についてです。私が今やりたいのは、マップのフィールドに基づいてコレクションを並べ替えることです。
自分の関数でArrayCollection
's関数を使用すると機能します。これが私がそれを実装した方法です:sort
compareFunction
var key:int = 15;
var sort:Sort = new Sort();
sort.compareFunction = fidSort;
myCollection.sort = sort;
myCollection.refresh();
private function fidSort(a:Object, b:Object, fields:Array = null):int {
if(a.myMap[key].fieldValue == b.myMap[key].fieldValue) {
return 0;
} else if(a.myMap[key].fieldValue > b.myMap[key].fieldValue) {
return 1;
} else{
return -1;
}
}
私が言ったように、それはソートのために機能します。ただし、当然、(コレクションのプロパティである)並べ替えは、コレクションから特に削除されない限り、コレクションに残ります。つまり、マップ内の値がMyObject
変更されるたびに、compare関数に従って並べ替えられます。
必要なのは、並べ替えを1回だけ適用することです。その後、マップ値で何が起こっても、コレクションの並べ替えは変更されません。
コレクションの自動更新を無効にするなどの方法を試しました(コレクションが更新を取得しなくなるため、当然機能しません(ただし、キャッシュされるだけです))。その後、基になる配列のソートに関するこの投稿を読みました。myMap[key].fieldValue
ただし、で見つからなかったというコンパイルエラーが発生するため、マップでは機能しないようですMyObject
。
そうです、私はここの宇宙でちょっと迷っています。誰かがこれを達成する方法の手がかりを持っているなら、本当に非常に基本的なタスクです、私に知らせてください。
乾杯!