【发布时间】:2012-05-21 12:20:51
【问题描述】:
我有一个由包含模型类实例的 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,是的,我试过了,但没用。将排序设置为 null 然后刷新调用设置会删除排序并将 ArrayCollection 设置回其默认状态。在不调用 refresh() 的情况下,排序仍然适用于每次更新。
-
@Vishwas Gagrani,这根本不是异常,而不是实现排序方式的默认行为。一旦 ArrayCollection 得到更新,它将被排序以防设置排序。
标签: actionscript-3 sorting apache-flex air flex4.5