2013-07-04 60 views
0

我有一個ArrayCollection(neList)的對象(neObj)。每個neObj都有幾個字段,如ipAddress,TID等。在大多數情況下,neObj將具有TID和ipAddress的值,很少它不會有TID但具有ipAddress ...添加對象(neObj)後,我需要對ArrayCollection的行爲必須與只有字符串的array.sort()類似(即首先依次按字母順序排序)ArrayCollection上的Flex-Sorting

我試過的東西: 1)使用neList.source.sort( )和neList.refresh ..但它沒有工作的neList.source有對象不是直線前進的東西像串 2)我覺得我不能使用的ArrayCollection的sortOn功能,因爲它可以在只有1場

做我的要求: 使用案例1: - 對象i n ArrayCollection同時具有TID和IP neObj1.TID =「RAPC」neObj1.ipAddress =「121.1.1.2」; neObj2.TID = 「RAPA」 neObj2.ipAddress = 「121.1.1.1」 O/P後分類應該是 neObj2 neObj1

使用情況2: - 1的對象的不具有TID neObj1.ipAddress =「121.1 1.2" ; neObj2.TID =「RAPA」 neObj2.ipAddress =「121.1.1.1」 O/P後整理應該是 neObj1 neObj2

+1

這些都是使用排序與ArrayCollection的文檔:HTTP ://flex.apache.org/asdoc/spark/collections/Sort.html – RIAstar

+0

你需要一個sortCompareFunction;如果你周圍谷歌我相信你會發現一堆樣本和更詳細的文檔。 – JeffryHouser

+0

謝謝..我會嘗試與sortCompareFunction ..但我不知道爲什麼這不起作用... :( – kushi

回答

0

正如評論暗示,你需要使用一個排序的compareFunction來決定如何項目將被排序。

我想指出,排序字母和數字的組合是棘手的,因爲默認情況下沒有自然順序。例如在排序1,2和11時,訂單將爲1,11,2.但是,您可以使用AS3Commons Lang項目中的naturalCompare方法解決此問題。

下面是您的案例的代碼示例。排序實現爲排序類的子類,這樣就可以輕鬆地重用它在其他收藏品:

package { 

import mx.collections.Sort; 

import org.as3commons.lang.StringUtils; 

public class NaturalSort extends Sort { 

    public function NaturalSort() { 
    compareFunction = function (a:Object, b:Object, fields:Array = null):int { 
     var stringA:String = (("TID" in a) ? a.TID : "AAAA") + a.ipAddress; 
     var stringB:String = (("TID" in b) ? b.TID : "AAAA") + b.ipAddress; 
     return StringUtils.naturalCompare(stringA, stringB); 
    }; 
    } 
} 
} 

若要將此:

var collection:ArrayCollection; 
collection.sort = new NaturalSort(); 
collection.refresh(); 
+0

感謝您的幫助 – kushi