The benefit is that your getter function will be bound to that event, so
any time that event is dispatched, the data binding is updated.  In this
example, it doesn't really stand out that this is a great thing.  Let's
say that there is also a "get lastname" function that is similar to your
firstname function, and add an updateNames function, so we have this...

 

[Bindable(event="MyEvent")]

public function set firstname(value:String):void

{

            _firstname = value;

            dispatchEvent( new FlexEvent('MyEvent') );

}

public function get firstname():String

{

            return _firstname;

}

private var _firstname:String;

 

[Bindable(event="MyEvent")]

public function set lastname(value:String):void

{

            _lastname = value;

            dispatchEvent( new FlexEvent('MyEvent') );

}

public function get lastname ():String

{

            return _lastname;

}

private var _lastname:String;

 

public function updateNames ( myUpdateObject : Object ):void

{

            _firstname = myUpdateObject.firstname; 

            _lastname  = myUpdateObject.lastname

            dispatchEvent( new FlexEvent('MyEvent') );

}

 

The updateNames function dispatches a single event, which updates the
bindings on both of your "getter" functions.   Now, the real benefit of
"set" functions is that you can programmatically execute code when a
value is updated.  Your names example doesn't take full advantage of the
capabilities.  The "set" function is better suited for when you have
other functions that should be executed any time that your "set" is
updated.

 

[Bindable(event="MyEvent")]

public function set firstname(value:String):void

{

            _firstname = value;

       //execute some code here

       doSomething();

       doSomethingElse();

       doAnotherThing();

            dispatchEvent( new FlexEvent('MyEvent') );

}

 

In this example, the data binding gets updated after the other functions
have been executed.  This technique is VERY useful when developing flex
components.  For instance, you can have a function on a custom component
that extends a text box such as: 

 

override public function set text( value : String ) : void

 

And you want other properties to be updated when text has been updated,
so you setup your "set" function like this:

 

override public function set text( value : String ) : void

{

            this.updated = true;

            resetComponentState();

            super.text = value;

} 

 

Hope that helps,

-Andy

_____________________________________

Andrew Trice

Cynergy Systems, Inc.

http://www.cynergysystems.com

 

Blog: http://www.cynergysystems.com/blogs/page/andrewtrice

Email: [EMAIL PROTECTED]

Office: 866-CYNERGY 

 

________________________________

From: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] On
Behalf Of Bjorn Schultheiss
Sent: Tuesday, November 28, 2006 9:02 PM
To: flexcoders@yahoogroups.com
Subject: [flexcoders] Databinding Custom Event

 

Hey,

 

What if any benefits are there to defining a custom event type for your
databinding?

ie:

[Bindable(event="MyEvent")]

public function set firstname(value:String):void

{

            _firstname = value;

            dispatchEvent( new FlexEvent('MyEvent') );

}

public function get firstname():String

{

            return _firstname;

}

private var _firstname:String;

 

vs

[Bindable]

public var lastname:String;

 

Regards,

Bjorn

 

Reply via email to