2013-07-04 3 views
0

У меня есть ArrayCollection (neList) объектов (neObj). Каждый neObj имеет несколько полей, таких как ipAddress, TID и т. Д. В большинстве случаев neObj будет иметь значения как TID, так и ipAddress, редко он не будет иметь TID, но имеет ipAddress ... После добавления объектов (neObj) мне нужно сортировать ArrayCollection, поведение которого должно быть похоже на array.sort(), у которого есть только строки .. (т.е. nos сначала, за которым следуют строки в алфавитном порядке)Flex-Sorting on ArrayCollection

То, что я пробовал: 1) Использование neList.source.sort () и neList.refresh .. но это не сработало, так как neList.source имеет объекты, не имеющие прямого значения, такие как строки 2) Я думаю, что я не могу использовать функцию sortOn из ArrayCollection, как это можно сделать только на одном поле

My Требование: Использование Case1: - Объекты i n ArrayCollection имеют как TID, так и IP neObj1.TID = "RAPC" neObj1.ipAddress = "121.1.1.2"; neObj2.TID = "РАГС" neObj2.ipAddress = "121.1.1.1" O/P после сортировки должно быть neObj2 neObj1

Применение Случай 2: - 1 из объектов не имеет TID neObj1.ipAddress = "121.1 .1.2" ; neObj2.TID = «РАГС» neObj2.ipAddress = «121.1.1.1» O/P после сортировки должны быть neObj1 neObj2

+1

Эти документы по использованию Sort с ArrayCollection: HTTP : //flex.apache.org/asdoc/spark/collections/Sort.html – RIAstar

+0

Вам нужна функция sortCompareFunction; если вы Google вокруг, я уверен, вы найдете кучу образцов и более подробные документы. – JeffryHouser

+0

Спасибо .. Я попробую с sortCompareFunction .. Но я не уверен, почему это не работает ... :( – kushi

ответ

0

Как указывалось в комментариях, вам нужно использовать сортировки compareFunction, чтобы решить, как предметы будут отсортированы.

Я хотел бы указать, что сортировка комбинации букв и цифр сложна в том смысле, что по умолчанию нет естественного порядка. например при сортировке 1, 2 и 11 заказ будет 1, 11, 2. Однако вы можете решить это, используя метод naturalCompare в проекте AS3Commons Lang.

Вот пример кода для вашего случая. Рода реализуется как подкласс класса сортировки, так что вы можете легко использовать его в других коллекциях:

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

Смежные вопросы