我有一个列表传播的ArrayCollection持有模型类的实例。 此模型类具有对包含库存值的字典的类引用。自然,这些价值不断刷新。停止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;
}
}
那么,有没有办法阻止不是简单地在函数结束把一个布尔值停止排序等排序的过程?这意味着该函数仍然会随着值的每次更新而分派,这是一种相当不希望的行为。
您是否尝试过在刷新执行后将数组集合的排序属性设置为空? – bedwyr
函数的持续运行是一种异常行为。不是吗?您是否尝试过点击后禁用按钮?可能是,按钮被按下两次或三次? –
@bedwyr,是的,我试过了,虽然没有工作。将排序设置为空,然后刷新调用集将删除排序并将ArrayCollection设置回默认状态。如果不调用refresh(),那么排序仍然适用于每次更新。 – AlBirdie