Hi all,

I have been working on my first custom ActionScript component and have
been trouble getting the data-binding setup properly.

I am trying to making a "FilterManager" component which will enable to
the user to filter based on one or multiple columns in a DataGrid. In
order to do this though I need to be able to bind a DataGrid to the
component. I have not been able to figure out how to do this though, and
was hoping someone might be able to help shed some light.

Here is the code for the component, and the MXML used to instantiate the
component:

<custom:FilterManager datagrid="{Application.application.dgResults}"
test="Test String" width="100%" height="100%"/>

/***********************************************************************\
********
  * Filter Manager
 
************************************************************************\
******/
package custom {

     import mx.containers.Form;
     import mx.containers.FormItem;
     import mx.controls.Alert;
     import mx.controls.DataGrid;
     import mx.utils.ObjectUtil;
     import flash.events.Event;


    
/***********************************************************************\
****
     * Class definition for a class to manage the various search filters
    
************************************************************************\
***/
     public class FilterManager extends Form {

         [Bindable]
         public var datagrid:DataGrid;

         private var _test:String;

         private var filterSettings:Array;

        
/***********************************************************************
         * FilterManager (Constructor)
         *
         * Creates an instance of the filter manager class
        
***********************************************************************/
         public function FilterManager():void {
             super();
             this.initFilters();
         }

         [Bindable]
         public function set test(value:String):void
     {
         _test = value;
     }

     public function get test():String
     {
         return _test;
     }

        
/***********************************************************************
         * initFilters
         *
         * Builds an array to manage the different filters that may be
set
        
***********************************************************************/
         private function initFilters():void {
             this.filterSettings = new Array();

             for each (var col:* in this.datagrid.columns) {
                 var d:Object = new Object();

                 if (col['dataField'] != null) {
                     d.field   = col['dataField'];
                     d.enabled = false;
                     d.filter  = null;
                     this.filterSettings.push(d);
                 }
             }
         }

        
/***********************************************************************
         * component overrides
        
***********************************************************************/
         override protected function createChildren():void {
             super.createChildren();
             for each (var item:Object in this.filterSettings) {
                 var f:FormItem = new FormItem();
                 f.label = item.field;
                 addChild(f);
             }
             Alert.show("createChilden()");
         }

         override protected function commitProperties():void {
             super.commitProperties();
         }

         override protected function measure():void {
             super.measure();
         }

         override protected function
updateDisplayList(unscaledWidth:Number,
                                                
unscaledHeight:Number):void {
             super.updateDisplayList(unscaledWidth,unscaledHeight);
         }

     }
}
I've tried passing in data both via public variables (the "datagrid"
field), and using the preferred accessor & mutator route ("test"), but
have not had any luck with either.

Can anyone please tell me what the proper way to bind a DataGrid in the
application to the custom component so that I can reference it in the
initFilters function?

Any help would be greatly appreciated.

Thanks!
Keith

Reply via email to