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;
> >
> > }
> >
>


Reply via email to