首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >排序列表的ItemRenderer提供程序时列表数据重复

排序列表的ItemRenderer提供程序时列表数据重复
EN

Stack Overflow用户
提问于 2014-05-08 01:24:30
回答 2查看 161关注 0票数 0

这个标题基本上说明了我的问题。我正在对列表中的dataProvider进行排序。我的名单上有itemRenderers。构建3个项目,opt1,opt2,opt3 -然后在列表上拖放,完成后,我等待我的自定义newRank变量在列表的dataProvider中设置。然后在对列表排序后,我的项目渲染器呈现出5个项目,而不是3个: opt2、opt3、opt1 (前三个排序正确)、opt3、opt3。我尝试过使用基本排序和customFunction进行排序,但我无法正确地进行排序。任何帮助都将不胜感激。

代码语言:javascript
复制
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;
    }
}
EN

回答 2

Stack Overflow用户

发布于 2014-05-09 11:02:20

获取一个可绑定的变量,并将其提供给您的列表...在排序函数中使用该变量并调用刷新...例如:

代码语言:javascript
复制
[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}"/>

也许这将解决您的重复问题.....

票数 0
EN

Stack Overflow用户

发布于 2014-05-10 04:49:42

我有能力解决这个问题。大多数问题都与我的排序运行时反复触发的DATA_CHANGE事件有关。我放了一个旗子,它解决了我的问题。有点老生常谈,但invalidateList允许我将数据清除并重新初始化到UI中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23524302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档