亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Flex > 正文

Flex Bindable 的用法

2024-09-12 17:51:29
字體:
來源:轉載
供稿:網友
我就按自己的理解隨便解釋一下:首先要明白元數據不是語法的一部分,而是專門給編譯器用的,說白了是告訴編譯器做某些事情,學過java之類的應該知道。那Bindable來講,它的作用是告訴 flex編譯器,給某些某些東西建立綁定關系,flex編譯器會在編譯過程中給AS(flex編譯器就是把mxml編譯成as,再編譯到swf,也可能直接編譯倒swf,我這里假設有as這么個環節)加一點事件發生和處理之類的代碼,由此綁定的關系便建立了,如果我們用純粹as3代碼來寫也是可以實現的,就是太太太麻煩。
什么是綁定:
舉個例子:給下面的public變量加上[Bindable]
[Bindable]
public var name:String = "";
作為一個public變量,肯定既可以被賦值,也能賦值給別的變量。綁定的作用就是,當name改變的時候(被賦值了),可能通知其它被name影響(賦值給它們)的變量發生改變。這里的“可能”就需要編譯器來判斷,這就是為什么元數據是給編譯器用的原因了。在mxml里用{}的語法的地方就是綁定的對象,比如label={xxx.name},當name變化,label也跟著變化。這樣,我們只是很簡單的改變了name的值,由于有綁定,界面上的 label也跟著自動變化了,爽吧。
能用在哪里
三個地方:類, 變量, getter/setter。是不是public沒有關系,private的就只能給自家用唄。用在Class上就是簡單的給所有的public屬性(包括變量,getter/setter,普通方法)加上 [Bindable],可是一般的方法不能用[Bindable]呀,于是一般就能看到flex給了個warning,直接無視:)。變量嘛就是上面講的,很簡單略掉。
用在只讀,只寫屬性(getter/setter)上面
終于講到關鍵地方了,因為getter和setter很像方法,用起來會有點不同??纯催@個例子:
復制代碼 代碼如下:

[Bindable]
private var content:Array = new Array();
[Bindable]
public function set _content(ct:String):void
{
content = ct.split(SEP);
}
[Bindable]
public function get _wholeText():String
{
if(content.length == 0)
{
return "";
}
else
{
var _w:String = "";
for(var i:int=0 ; i<content.length ; i++)
{
_w += content[i] + "/r/n";
}
return _w;
}
}

原來的設想是content綁定_wholeText,可它是不工作的。為什么?_wholeText太復雜了,被編譯器排除在“可能”之外,編譯器認為沒有綁定關系,如果只是簡單的return content,倒是可以的。我這里搜到了一些比較權威的解釋。來自http://www.rubenswieringa.com/blog/binding-read-only-accessors-in-flex找到Ely Greenfield講的。
Now keep in mind that there's no way for the compiler to actually tell if the value of a property get function would be different if called, short of doing an extensive code flow analysis of the get function, identifying all the inputs that might be affecting the value of the get function (i.e., member fields, statics, globals that are used in the get function and in any methods, global functions, closures, etc) it might call, and setting up watchers on every one of those to trigger the binding when any of them change. That's prohibitively difficult, and expensive to do. So the compiler doesn't try.
Instead when you put [Bindable] on a get/set property, the compiler makes it bindable with a little creative rewriting that allows the framework to watch the get function, and dispatch a change event when the get function is triggered. This means that automatic bindable properties don't work when the get function is computed from multiple values, or when you change its value by setting a backing field, rather than using the set function.
It _also_ means that if you have no set function, we can pretty much guarantee that there's no way automatically bindable get properties will be triggered. a read only propeerty is, to the compiler, completely opaque…at the moment, it has no idea where that value is coming from, and hence will never be able to ‘automatically' trigger the binding.
說白了就是為了降低復雜度和提高效率,復雜情況的getter會被忽略。如何解決?可以手動建立綁定,即[Bindable("eventName")]。把代碼改成這樣:
復制代碼 代碼如下:

[Bindable]
private var content:Array = new Array();
[Bindable]
public function set _content(ct:String):void
{
content = ct.split(SEP);
this.dispatchEvent(new Event("_contectChanged"));
}
[Bindable("_contectChanged")]
public function get _wholeText():String
{
if(content.length == 0)
{
return "";
}
else
{
var _w:String = "";
for(var i:int=0 ; i<content.length ; i++)
{
_w += content[i] + "/r/n";
}
return _w;
}
}

這樣就避免了編譯器去自動識別。自己加上綁定關系,當_content被賦值,發出_contentChanged事件,通知所有被綁定的getter方法執行一遍。這也說明了,綁定不過是事件游戲而已,flex為用戶隱藏了很多底層算法。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成人网在线| 美女少妇精品视频| 国产精品第一区| 4p变态网欧美系列| 久久久影视精品| 美日韩丰满少妇在线观看| 亚洲精品国偷自产在线99热| 欧美激情在线有限公司| 91在线看www| 在线观看久久久久久| 亚洲人午夜色婷婷| 91精品国产沙发| 日韩av在线资源| 亚洲日韩欧美视频| 欧美日韩国产精品一区二区不卡中文| 国产成人激情视频| 91丝袜美腿美女视频网站| 亚洲变态欧美另类捆绑| 亚洲欧洲在线免费| 久久久久久亚洲精品不卡| 色综合久综合久久综合久鬼88| 日韩免费不卡av| 久久琪琪电影院| 欧美一区二区三区艳史| 日日骚av一区| 日韩欧美中文第一页| 日韩精品免费在线| 精品视频在线播放免| 欧美成人第一页| 91精品视频在线免费观看| 国产精品一区二区三区久久久| 免费成人高清视频| 成人免费网站在线观看| 久久99热这里只有精品国产| 搡老女人一区二区三区视频tv| 国产原创欧美精品| 丝袜亚洲另类欧美重口| 国产日韩精品视频| 午夜精品一区二区三区在线播放| 日韩电影中文 亚洲精品乱码| 国产一区二区色| 91夜夜揉人人捏人人添红杏| 欧美性高潮在线| 亚洲精品国产成人| 国语自产精品视频在线看抢先版图片| 亚洲欧美国产va在线影院| 久久久久久九九九| 亚洲sss综合天堂久久| 国产精品永久免费在线| 色综合天天狠天天透天天伊人| 欧美性猛交xxxx乱大交3| 国产视频久久久| 一区二区三区回区在观看免费视频| 亚洲欧美日韩中文视频| 欧美成人精品影院| 久久亚洲国产成人| 欧美在线观看视频| 欧美精品激情视频| xxx成人少妇69| 三级精品视频久久久久| 亚洲在线免费观看| 国产一区二区三区在线看| 91精品久久久久久| 亚洲国产精品小视频| 精品久久久国产| 日韩成人小视频| 欧美激情在线观看视频| 国产精品999| 久久影视电视剧免费网站清宫辞电视| 欧美孕妇毛茸茸xxxx| 欧美乱大交xxxxx另类电影| 亚洲精品日产aⅴ| 亚洲视频999| 亚洲少妇中文在线| 日韩在线观看网站| 在线播放日韩精品| 国产ts人妖一区二区三区| 亚洲欧美三级伦理| 中文字幕亚洲综合久久筱田步美| 亚洲国产黄色片| 亚洲精品wwwww| 欧美激情精品久久久久久黑人| 日本精品免费观看| 欧美大全免费观看电视剧大泉洋| 欧美大胆a视频| 亚洲人成网在线播放| 日韩精品欧美国产精品忘忧草| 国产成人精品一区二区三区| 国产成人精品视频在线观看| 亚洲成人av片| 一夜七次郎国产精品亚洲| 国产精品久久不能| 日韩中文字幕网址| 在线播放亚洲激情| 国产大片精品免费永久看nba| 国产亚洲精品美女久久久| 69av在线播放| 欧美国产精品va在线观看| 国产精品91久久久| 欧美成人性生活| 久久伊人91精品综合网站| 国产91成人video| 久久99国产综合精品女同| 国产精品久久久久久av福利| 国产精品主播视频| 精品动漫一区二区| 亚洲福利视频网| 成人免费观看a| 亚洲乱码国产乱码精品精| 大量国产精品视频| 久久久久久这里只有精品| 久久久久久久一区二区| www.日韩不卡电影av| 亚洲a中文字幕| 日本伊人精品一区二区三区介绍| 自拍偷拍免费精品| 久久久久九九九九| 国产精品亚洲精品| 久久久久国产精品免费| 国产视频丨精品|在线观看| 日韩大片免费观看视频播放| 国产精品日日摸夜夜添夜夜av| 欧美理论电影在线观看| 亚洲精品一区久久久久久| 午夜剧场成人观在线视频免费观看| 久久久精品在线| 久久久久久久久久久国产| 欧美在线视频观看| 国产成人在线播放| 亚洲香蕉av在线一区二区三区| 欧美日韩国产精品一区二区不卡中文| 国产区精品在线观看| 日韩精品免费看| 国产精品久久久久av免费| 国产午夜精品麻豆| 国产日产欧美a一级在线| 亚洲第一中文字幕| 性欧美暴力猛交69hd| 最近2019年手机中文字幕| 91亚洲精华国产精华| 日本精品久久中文字幕佐佐木| 国产精品都在这里| 亚洲老板91色精品久久| 亚洲欧美中文日韩在线| 97精品国产97久久久久久免费| 日本一区二区三区四区视频| 久久香蕉频线观| 国产精品久久av| 懂色av影视一区二区三区| 一夜七次郎国产精品亚洲| 亚洲电影免费观看高清| 日本精品在线视频| 久久亚洲精品毛片| 日韩美女视频免费在线观看| 亚洲欧洲日韩国产| 91在线观看免费| 亚洲精品99久久久久中文字幕| 久久久久女教师免费一区| 国产午夜精品久久久| 日韩免费观看视频| 91在线视频成人| 亚洲精品国产福利| 国产精品一区二区性色av| 欧美精品福利在线|