モデル クラスのインスタンスを保持する ArrayCollection によって伝達されたリストがあります。このモデル クラスには、株価を保持するディクショナリへのクラス参照があります。当然、これらの値は常に更新されます。
並べ替え関数を ArrayCollection に適用すると、正しい並べ替えが行われますが、並べ替え関数は常に実行されますが、一度だけ実行する必要があります。そのため、ArrayCollection を初めて並べ替えた直後に並べ替えを停止する必要があります。
私の並べ替え関数は、ヘッダー ボタンのクリックでトリガーされます (私は、モバイル用に最適化されたリスト ベースの DataGrid で作業しているため、ArrayCollection を常に並べ替える必要がないだけでなく、パフォーマンスも必要です)、次のようになります。
private function headerClick(event:MouseEvent):void {
sField = event.currentTarget.id;
var sort:Sort = new Sort();
sort.compareFunction = fidSort;
(_list.dataProvider as ArrayCollection).sort = sort;
(_list.dataProvider as ArrayCollection).refresh();
}
private function fidSort(a:Object, b:Object, fields:Array = null):int {
if(a.fidList.fidMap[sField].fieldValue == b.fidList.fidMap[sField].fieldValue) {
return 0;
} else if(a.fidList.fidMap[sField].fieldValue > b.fidList.fidMap[sField].fieldValue) {
return 1;
} else{
return -1;
}
}
では、単純にブール値を関数の最後に置いて並べ替えを停止する以外に、並べ替えプロセスを停止する方法はありますか? これは、値が更新されるたびに関数がディスパッチされることを意味し、望ましくない動作です。