标题基本上说明了我的问题。我正在为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;
}
}
答案 0 :(得分:0)
取一个[Bindable]变量并将其列入您的列表...... 在排序功能中使用该变量并调用刷新... 例如
[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}"/>
这可能会解决你的重复问题......
答案 1 :(得分:0)
我能解决这个问题。大多数问题都与我的排序运行时反复触发的DATA_CHANGE事件有关。我放了一面旗帜,它解决了我的问题。有点hacky,但invalidateList允许我清除并重新初始化数据到UI。