Thanks Scott. This was very helpful. 

Don

--- In [email protected], Scott Melby <[EMAIL PROTECTED]> wrote:
>
> 1) Can someone explain in words what indexOf does? Obviously it
> compares the two and spits out a number, but I just don't fully grasp
> what is going on. Why use it instead of just == ?
> 
>   - String.indexOf returns -1 if the specified sequence is not found in 
> the target string (the one you are calling the method on) and returns 
> the zero based index of the position within the target string if it is 
> found.  You would use indexOf if you were interested in substring 
> (partial) matches.  i.e. so your grid shows all titles with "ch" in
them 
> without requiring the title to BE "ch".
> 
> The problem you are having is that the filter calls methods on both 
> title and docNumber without first checking if they are null.  So, if 
> either is null you are going to get exceptions.
> 
> I would probably re-write that as something like: Note... this code may 
> not compile, but should be close :)
> 
> public function processFilter(item:Object):Boolean
> {
> var result:Boolean=false;
> 
> 
> //make sure there is a search term
> if(term.text != null && term.text.length > 0)
> { 
>    //get the search term as upper case
>    var searchTerm:String = term.text.toUpperCase();
> 
>    //check against the title
>    if(item.title != null && item.title.length > 0)
>    {
>       result = (item.title.toUpperCase().indexOf(searchTerm) != -1);
>    }
> 
>    //no need to check doc number if title already matched or if
there is no docNumber
>    if(result == false && item.docNumber != null &&
item.docNumber.length > 0)
>    {
>       result = (item.docNumber.toUpperCase().indexOf(searchTerm) != -1);
>    }
> }
> 
> return result;
> }
> 
> Though I may use RegExp and String.search() instead of indexOf... 
Check out this page
<http://livedocs.adobe.com/flex/3/html/help.html?content=09_Working_with_Strings_09.html>
for more info on string searches.
> 
> 
> hth
> Scott
> 
> Scott Melby
> Founder, Fast Lane Software LLC
> http://www.fastlanesw.com
> http://blog.fastlanesw.com
> 
> 
> 
> Don Kerr wrote:
> > I've been using this code below for a long time...but don't fully
> > understand how it works:) It does work great, as long as both title
> > and docNumber are not null. But it blows up if docNumber is null.
> >
> > 1) Can someone explain in words what indexOf does? Obviously it
> > compares the two and spits out a number, but I just don't fully grasp
> > what is going on. Why use it instead of just == ?
> >
> > 2) The OR || isn't clicking either. Would I add !item.docNumber.length
> > as another || to prevent the error when docNumber is blank? I want it
> > to filter on one or more columns in the dataProvider, but not blow up
> > if any one of them are blank. If one is blank, it should still filter
> > on the others.
> >
> > public function processFilter(item:Object):Boolean
> > {
> > var result:Boolean=false;
> > // If no filter text, or a match, then true
> > if (!item.title.length
> > || item.title.toUpperCase().indexOf(term.text.toUpperCase()) >= 0    
> > ||item.docNumber.toUpperCase().indexOf(term.text.toUpperCase()) >= 0
> > )
> > result=true;
> >                         
> > return result;
> > }
> >
> > Thanks for the added insight into this borrowed code.:)
> > Don
> >
> >
> >
>


Reply via email to