Not sure why you are implementing your own compare. Instead I would add an integer sort property to your code object, where the specified order is reflected. Of your n specially sorted objects, each gets 1...n value, all the remaining being sorted elsewhere get n+1. Then you use multiple sortfields with the first sorting on the sort property, and the second on your code property.
See http://livedocs.adobe.com/flex/3/html/help.html?content=advdatagrid_03.htmland http://www.brucephillips.name/blog/index.cfm/2006/11/23/Sort-An-ArrayCollection-By-Multiple-Fields-and-Filter-An-ArrayCollection-By-Multiple-Fields-In-Flex happy coding John On Wed, Feb 27, 2013 at 9:31 AM, Shervin Asgari <[email protected]>wrote: > Hi. > > I am very very new to Flex. > I created this thread for sorting in Java > http://stackoverflow.com/q/15091732/37298 > > However, I am now trying to do the same thing in ActionScript. > > I have a Bindable ArrayCollection with Objects that looks like this > > Code.code : F > Code.label: Foo > Code.description: The Foo description > > Then I want to sort exactly as specified in the stackoverflow site. > I have around 10 of them which I need in a particular order. I have them > defined in an array. > > Based on the stackoverflow question and some googling, I have come up with > the following: > > private function myCompare(a:Object, b:Object, fields:Array = null):int { > if (mostUsed.contains(a.code) && mostUsed.contains(b.code)) { > return fields.getItemIndex(a) - fields.getItemIndex(b); > } > > if (mostUsed.contains(a.code)) { > return -1; > } > > if (mostUsed.contains(b.code)) { > return 1; > } > > var s:Sort = new Sort(); > s.fields = fields; > var f:Function = s.compareFunction; > return f.call(null,a,b,fields); > } > > private var mostUsed:ArrayCollection = new ArrayCollection(["F", "A", "B", > "FTR", "HIS", "KEB", "LEG", "MED", "MER", "PEN", "PEO", "PER", "PIN", > "PUR", "REF"]); > > var grunner:ArrayCollection = //getting collection > grunner.sort.fields = [new SortField("code")]; > grunner.sort.compareFunction = myCompare; > grunner.refresh(); > > But it doesnt work. Any clues? > My collection returns empty. > > Regards Shervin >
