这个标题基本上说明了我的问题。我正在对列表中的dataProvider进行排序。我的名单上有itemRenderers。构建3个项目,opt1,opt2,opt3 -然后在列表上拖放,完成后,我等待我的自定义newRank变量在列表的dataProvider中设置。然后在对列表排序后,我的项目渲染器呈现出5个项目,而不是3个: opt2、opt3、opt1 (前三个排序正确)、opt3、opt3。我尝试过使用基本排序和customFunction进行排序,但我无法正确地进行排序。任何帮助都将不胜感激。
public function sortItemsByNewRank():void{
var srt:Sort = new Sort();
//srt.fields = [new SortField("newRank", true, false, true)];
srt.compareFunction = myCompare;
var ac:ArrayCollection = this.dataProvider as ArrayCollection;
ac.sort = srt;
ac.refresh();
}
private function myCompare(a:Object, b:Object, fields:Array = null):int {
LOG.debug("ExtendedList a and b: "+a.newRank+" "+b.newRank);
if(a.newRank == b.newRank) {
return 0;
} else if(a.newRank > b.newRank) {
return 1;
} else{
return -1;
}
}发布于 2014-05-09 11:02:20
获取一个可绑定的变量,并将其提供给您的列表...在排序函数中使用该变量并调用刷新...例如:
[Bindable]
private var _dataProvider:ArrayCollection
public function sortItemsByNewRank():void{
var srt:Sort = new Sort();
//srt.fields = [new SortField("newRank", true, false, true)];
srt.compareFunction = myCompare;
_dataProvider.sort = srt;
_dataProvider.refresh();
}
<s:List dataProvider="{_dataProvider}"/>也许这将解决您的重复问题.....
发布于 2014-05-10 04:49:42
我有能力解决这个问题。大多数问题都与我的排序运行时反复触发的DATA_CHANGE事件有关。我放了一个旗子,它解决了我的问题。有点老生常谈,但invalidateList允许我将数据清除并重新初始化到UI中。
https://stackoverflow.com/questions/23524302
复制相似问题