Flex is a lovely thing. I've managed to do some quite advanced tricks
using item renderers, datagrid extensions, and rotating images, and
yet I find myself confused by something very basic. Perhaps data
binding just doesn't do what I expect! Or hopefully, I'm just doing it
wrong and some kind person here can set me straight. :-)

It seems that when I bind a property to a component, the component is
easily updated whenever the property changes - but the opposite
doesn't happen. If the component changes, it doesn't automatically
update the original bound value (unless I explicitly perform the
update myself in an event handler).

Say we have the following code:

<mx:Script>
  <![CDATA[
    private var _mytext:String;

    [Bindable]
    public function get mytext():String
    {
      return _mytext;
    }

    public function set mytext(value:String):void
    {
      _mytext = value;
      dispatchEvent(new Event("propertyChange"));
    }
  ]]>
</mx:Script>

<mx:Label text="Enter text:"/>

<mx:TextInput id="txt" text="{mytext}"/>


With this code, any change to mytext will update the TextInput
control. But if the user types something into the control, mytext is
not updated...

It seems I have to force the binding to be two-way by adding an event
handler to the TextInput component:

<mx:TextInput id="txt" text="{mytext}" change="mytext=txt.text"/>


Is this really necessary? Is there any other way to force the binding
to be bidirectional??

All help and advice appreciated!

--Tracey



Reply via email to