2014-05-07 36 views
0

時被複制標題基本上告訴我的問題。我正在對dataProvider進行排序以獲取列表。 itemRenderers在列表中。 3項內置,opt1,opt2,opt3 - 然後我有一個拖放列表,當完成後,我等待我的自定義newRank變量設置在列表的dataProvider中。然後排序列表後,我的項目渲染器渲染出5項,而不是3:opt2,opt3,opt1(前三個排序正確),opt3,opt3。 我試圖用基本排序和自定義函數進行排序,但無法正確排序。任何幫助,將不勝感激。列表ItemRenderer在分類列表的數據提供者

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

我認爲這種排序實際上是有效的。不工作的是List組件在刷新後繪製dataProvider。它是複製項目,我試圖調用invalidateDisplayList和invalidateList來獲取列表重繪本身,但它什麼都不做。 – tcoulson

回答

0

取一個[綁定]變量,並把它給你的列表... 在排序函數中使用該變量,並調用刷新...... 如。

[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

我能解決這個問題。大部分問題都與我的排序運行時反覆發生的DATA_CHANGE事件有關。我放了一面旗幟,它解決了我的問題。有點冒險,但invalidateList允許我清除並重新初始化數據到用戶界面。

相關問題