Flex开发中,组件的绑定功能是非常强大的,善用绑定,将大大提高开发效率。绑定实质也是事件处理,进一步说,要学好Flex,Flex的事件处理机制一定要理解透彻。接下来就对Flex AS3的简单绑定做个总结。
先来看看,不使用绑定时的常规处理方式:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
               fontSize="12" fontFamily="微软雅黑">
    <fx:Declarations>
        <!-- 将非可视元素(例如服务、值对象)放在此处 -->
    </fx:Declarations>
    <s:layout>
        <s:BasicLayout />
    </s:layout>
    <s:Group top="30" left="20">
         <s:layout>
             <s:HorizontalLayout/>
         </s:layout>
        <s:TextInput id="myTextInput1"/>
        <s:Button label="复制到:" click="myTextInput2.text=myTextInput1.text"/>
        <s:TextInput id="myTextInput2"/>
    </s:Group>
</s:Application>

效果如下:
enter image description here

现在来看看使用绑定的3种场景。
1. 组件内部绑定

...
    <s:Group top="30" left="20">
        <s:layout>
            <s:HorizontalLayout/>
        </s:layout>
        <s:TextInput id="myTextInput1"/>
        <s:TextInput id="myTextInput2" text="{myTextInput1.text}"/>
    </s:Group>
...

注意绑定使用花括号标记,效果如下,在第一个TextInput里输入文字,第二个TextInput自动同步显示:
enter image description here

要实现双向同步绑定,只需这样:

<!-- <s:TextInput id="myTextInput1"/> -->
<s:TextInput id="myTextInput1" text="{myTextInput2.text}"/>
<s:TextInput id="myTextInput2" text="{myTextInput1.text}"/>

2. 标签绑定
通过标签<fx:Binding>在组件外部进行绑定,这种方式的优点在于:由于设置在组件的外部进行,代码修改起来比较方便,只需集中修改就好了。

...
    <fx:Binding source="myTextInput1.text" 
                destination="myTextInput2.text" 
                twoWay="true"/>
    <s:Group top="30" left="20">
        <s:layout>
             <s:HorizontalLayout/>
         </s:layout>
        <s:TextInput id="myTextInput1"/>
        <s:TextInput id="myTextInput2"/> 
    </s:Group>
...

从源(source)到目标(destination)绑定,twoWay属性设置为true表示双向同步绑定。
效果如下:
enter image description here

3. 变量绑定
编程过程中将创建很多变量,这些变量也是可以跟组件绑定在一起的,这样的话,动态生成的数据就能够同步在对应组件里及时刷新显示出来。
可绑定变量要通过Flex的元关键字[Bindable]来实现。

Flex MXML中的元关键字主要用途:

  • 用来描述变量、组件和类的额外属性;
  • 声明自定义组件所分发的自定义事件。
...
    <fx:Script>
        <![CDATA[
            [Bindable]
            public var s:String="";
        ]]>
    </fx:Script>
    <s:Group top="30" left="20">
        <s:layout>
             <s:HorizontalLayout/>
         </s:layout>
        <s:TextInput id="myTextInput1"/>
        <s:Button label="点我" click="s=myTextInput1.text"/>
        <s:TextInput id="myText" text="{s}"/> 
    </s:Group>
...

效果如下: enter image description here

总之,Flex 4在快速开发方面极具优势,掌握好Flex,不啻于掌握了一门高效强大的开发工具,虽然现在有很多Flash、Flex的各种黑,但Flex在贡献给Apache之后,迅速成为了Apache的顶级项目,其更新发布的速度更快了,社区支持非常活跃,在企业应用开发中,Flex能够发挥很大作用。当然,移动应用开发能力也是很强大的,许多移动应用也是用Flash或Flex开发出来的。推荐有兴趣的开发者把Flex放进你的开发工具箱里去。
enter image description here

顺便送给大家一首歌,迪克牛仔《放手去爱》,明天开始连续上8天班,一定要hold住哦。
迪克牛仔:放手去爱

你独自站在街角
脸上的伤痕没消
你哭着对我微笑
这画面像一把刀
我跪着向天祈祷
给我勇气面对一切 好不好
我却懦弱地让你转身走掉
错过你 一切已不再重要
放手去爱 不要逃
爱不是想要得到就能得到
谁赢谁输已不再重要
能痛痛快快一场就好
放手去爱 不要逃
一辈子能有几次机会寻找
有多少辛苦值得去炫耀
能看你一生幸福到老
这样就好