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

