Now I remember why I do this job…
Today I had one of those days you get as a programmer, when everything coalesces in a perfect way to shine a happy light on the universe. I had a list of bugs and a single feature I wanted to add to my Flex program. The single feature (dynamic filtering based on values in a set of arrays) took me a long time, and I wrestled with it mightily for several hours. I wanted desperately to make a filter which was extensible, which was easy to add new fields to, and passing variables around in Flex is not something I’ve become comfortable with.
So there I was, pounding my head against the thing, frustrated and feeling incompetent, until 4PM when a light shined down upon me from the sky, the scales fell from my eyes, whatever cliche you want to use… and the feature was complete. And when the dust cleared, I realized that 3 of the bugs on my ‘to-do’ list had gotten fixed in the process of creating this feature.
It’s an awesome day when you feel “done” with what you’re working on. I wasn’t even tempted to start on something else… I just basked in the glow of having gotten it done.
For anyone wandering here from flex land who wants to see the code, here it is:
private var filterObj:Object = {this:filterThis,that:filterThat}; // These arrays are populated elsewhere with a list of strings to filter on private var textObj:Object = {this:"",that:""}; private function filterAll():void { var filtered:Boolean = false; var filterType:String; for (filterType in filterObj) { if (filterObj[filterType].length > 0) filtered = true; } if (filtered) { dataSet.filterFunction = filterGeneralSet; dataSet.refresh(); } else { dataSet.filterFunction = null; dataSet.refresh(); } private function filterGeneralSet(item:XML):Boolean { var filterType:String; var element:String; var myArray:Array; // This is an 'and' filter where everything has to match for the element to return true for (filterType in filterObj) { if (filterObj[filterType].length > 0) { myArray = filterObj[filterType]; for each (element in filterObj[filterType]) { var itemFilter:String = item.child(filterType)[0]; if (itemFilter != element) { return false; } } } } return true; }
GEEK STUFF