Flex Data Binding详解 - 面向对象网,web开发,flex,学习,对象 - 面向对象技术开发

面向对象技术开发

会员投稿 投稿指南 站长资讯通告:
您的位置: 首页 > Web开发 > Flex > 正文

Flex Data Binding详解

来源: www.bianceng.cn 阅读:

Data BindIng简单的说就是当绑定源属性发生变化时,Flex 会把绑定源变化后属性的值赋给目的物的属性。做到了数据同步。

Data BindIng 什么时候发生:

1.在绑定源属性值发生改变时发生。

2.在绑定源发出initialize事件时绑定发生一次。

让属性具有可绑定功能:

一般的,只要在属性前加上

[Bindable] 或
[Bindable(event="eventname")]

元标记即可

注意:

如果没有标出触发绑定的事件,正如[Bindable],Flex会自动为绑定加上propertyChange事件,当源数据发生变化时,Flex将自动派发该事件,触发数据绑定。如果修改后数据和源数据“===”也就是全等,那么Flex将不会触发数据绑定。

如果标出的触发绑定的事件,正如[Bindable(event="eventname")],那么在源数据发生改变的时候,必须dispatch出该事件才能触发数据绑定。不论修改后数据和源数据是否全等,Flex都将会触发数据绑定,需要自己编程控制,例如:

<mx:Script>
           <!--[CDATA[
             [Bindable(event="hhhh")]
             private var ss:String="aaa"; 
             private function doTest():void
             {
              ss="bbb";
    f(ss!=="aaa") / /判断和源数据是否相等,不相等则触发绑定
    this.dispatchEvent(new Event("hhhh")); 
             }
           ]]-->
    </mx:Script>
 <mx:Text text="{ss}"/>
<mx:Button click="doTest()"/>

如果没有this.dispatchEvent(new Event("hhhh"))这句,那么你点击按钮是没有设么作用的。 另外当申明自定义触发事件时,用ChangeWatcher来监控其变化,发现虽然目的源值变了,但是ChangeWatcher却监控不到变化,同样ChangeWatcher也监控不到非共有变量的变化。关于ChangeWatcher,下面会提到。

绑定函数——Functions,对象——Object,数组——Arrays

函数:

你可以在{}中直接使用函数。例如:<mx:Text text="{Matn.random()*ss}"/>

上面这个没有什么好讲的,关于函数绑定下面这个比较重要:

<mx:Script>
       <!--[CDATA[
         public var ss:String="aaa";
         [Bindable(event="hhhh")]
         private function gg():String
         {
          return ss;
         }
         private function doTest():void
         {
          ss=Math.random().toString();
          this.dispatchEvent(new Event("hhhh"));
         }
       ]]-->
   </mx:Script>
<mx:Text text="{gg()}"/>
<mx:Button click="doTest()"/>

这样给函数加一个[bindable],便使函数具有绑定功能,但是如果不申明自定义触发事件,只能在组件初始化时绑定一次,点击以上按钮是没有什么作用的。大家可以自己试试。

还有getter和setter函数,比较重要,给getter或setter函数加上[bindable],用不着两个都加,加一个就可以了,例如:

<mx:Script>
       <!--[CDATA[
        public var ss:String="aaa";
         [Bindable]
         public function get gg():String
         {
          return ss;
         }
         public function set gg(value:String):void
         {
          ss=value;
         }
         private function doTest():void
         {
          gg=Math.random().toString();
          this.dispatchEvent(new Event("hhhh"));
         }
       ]]-->
   </mx:Script>
<mx:Text text="{gg}"/>
 <mx:Button click="doTest()"/>

同样能达到绑定效果,如果只有一个getter方法,那么要想实现数据绑定,就需要申明自定义触发事件了,大家可以自己试试。

Tags:
相关文章列表: