This is a little cleaner and less verbose. Also, if your ComboBox's are using Objects, you may have to use selectedLabel; instead of selectedItem:
private function filterData():void { xmlData2.filterFunction = itemFilterFunction; xmlData2.refresh() Alert.show(xmlData2.length.toString()); } private function itemFilterFunction( item:Object ):Boolean { var includeItem:Boolean = true; // colour filter includeItem = colourFilter(item); // size filter if (includeItem) includeItem = sizeFilter(item); return includeItem; } private function colourFilter( item:Object ):Boolean { var includeItem:Boolean = true; includeItem = (colourFilter.selectedItem == "All colours" || item.colour == colourFilter.selectedItem); return includeItem; } private function sizeFilter( item:Object ):Boolean { var includeItem:Boolean = true; includeItem = (sizeFilter.selectedItem == "All sizes" || item.sizes == sizeFilter.selectedItem); return includeItem; } -TH --- In flexcoders@yahoogroups.com, "Tim Hoff" <timh...@...> wrote: > > > Looks like you have a little problem in the logic. It will either > include all of the items or those that meet the two selected criteria. > But it won't include all of one and a selected criteria of the other. A > suggestion is to break up the individual criteria into seperate sub > filterFunctions. This makes it easier to read and debug; when you start > to use a lot of different filter criteria: > > private function filterData():void > { > xmlData2.filterFunction = itemFilterFunction; > xmlData2.refresh() > Alert.show(xmlData2.length.toString()); > } > > private function itemFilterFunction( item:Object ):Boolean > { > var includeItem:Boolean = true; > > // colour filter > includeItem = colourFilterFunction( item ); > > // size filter > if ( includeItem ) includeItem = sizeFilterFunction( item ); > > return includeItem; > } > > private function colourFilterFunction( item:Object ):Boolean > { > if ( colourFilter.selectedItem == "All colours" || item.colour == > colourFilter.selectedItem ) > { > return true; > } > else > { > return false; > } > } > > private function sizeFilterFunction( item:Object ):Boolean > { > if ( sizeFilter.selectedItem == "All sizes" || item.sizes == > sizeFilter.selectedItem ) > { > return true; > } > else > { > return false; > } > } > > -TH > > --- In flexcoders@yahoogroups.com, "munene_uk" munene.anthony@ > wrote: > > > > Thanks for the reply...how would the above example work for criteria > that comes dynamically through xml data? ive tried this code below on my > two combo boxes with id's of colourFilter and sizeFilter respectively... > > > > private function filterData():void > > { > > > > xmlData2.filterFunction = applyColourAndSizeFilter; > > xmlData2.refresh() > > Alert.show(xmlData2.length.toString()); > > > > } > > public function applyColourAndSizeFilter(item:Object):Boolean > > { > > > > if(colourFilter.selectedItem == "All colours" && > sizeFilter.selectedItem =="All sizes" ) > > { > > return true; > > > > } > > > > else > > { > > return item.colour == colourFilter.selectedItem && item.sizes == > sizeFilter.selectedItem; > > > > } > > >