[color=blue][size=medium]在flex程式設計中,bindble使用到最多的元資料。該標籤可以應用在變數或者類或者方法上。同在在mxml中使用」{}」引用設定為bindable的變數,從而實現對於變數賦值與介面元素的自動同步。
bindable的實現採用了gof的observer模式,或者publisher/subscriber模式。該實現允許乙個類(或者變數)可以將自身的變化自動通知給感興趣的物件。
對應observer模式,gof的說法是:
定義物件間的一種一對多的依賴關係,當乙個物件狀態發生改變的時候,所有依賴於他的物件都得到通知並被自動更新。這種互動也成為發布-訂閱。目標是通知的發布者。他發布通知是不需要知道誰是他的訂閱者(觀察者)。可以有任意數目的觀察著訂閱並接受通知。
在actionscript中,編譯器將會為該標籤給特定的屬性或類或者方法的變化增加事件關聯。
簡單的例子,如果定義了變數和乙個元件:
[bindable] var displayname :string;
, 編譯器在後台自動增加事件對應偽**如下:
function set dispayname(newvar :string) :void
// 型別初始化時被呼叫
function mxmlinit()
function updatedisplay()
可見,編譯器在背後做了大量的工作,為我們節省了很多的重複勞動來建立這種觀察關係。
對於初學flex的人,對於bindable的誤解往往是認為bindable是雙向的數值鏈結,事實上observer模式對應的乙個要素就是被觀察者對觀察者一無所知。
比如上面的例子,對於texta的修改,其值並不會自動的體現在displayname上。bindable只是建立單項的觀察者的關係,這一點至關重要。
對應mvc架構中,被觀察者往往對應model(資料模型?)的角色,而觀察者則對應於view(檢視)的角色,事實上很多的mvc架構也是非常依賴於bindable這個工具。
那麼什麼情況下應該應用bindable?leaf的個人經驗和理解是:
在不知道有哪些觀察者,或者需要動態的增加觀察者的時候,才需要是用observer模式!
當觀察者不需要彼此之間的知識的時候。
當被觀察者對觀察者的資訊不關心的時候。
當僅僅是簡單的介面數值對映關係的時候。
注意bindable是有額外的開銷的,別忘了那些編譯器自動生成的**,如果需要複雜的邏輯(並非簡單的數值賦值)對應的時候,不要使用bindable。
其實也是因為這一點,actionscript中,即使指定了bindable,如果對應的set或者get中邏輯比較複雜,則不會自動的建立事件關聯操作,而是忽略bindable標籤。
可以自己使用bindable[事件名稱]的方式建立關聯,adobe給出了這樣的例子:
private var _maxfontsize:number = 15;
[bindable(event="maxfontsizechanged")]
// define public getter method.
public function get maxfontsize():number
// define public setter method.
public function set maxfontsize(value:number):void
else
// create event object.
var eventobj:event = new event("maxfontsizechanged");
dispatchevent(eventobj);
} 注意在這個例子裡,複雜的邏輯是在setter裡面做的,而不是getter,為什麼? 因為setter呼叫的次數在正常的情況下總是要比getter少,原則上,
複雜的邏輯通常在賦值時完成,用空間換時間,而不是在每一次取值時計算。
特別資訊:
在flex4裡面,新增加了允許對於表示式的觀察! 例如:
同樣的**在flex3中無效。
Flex4中 Bindable 做了什麼?
flex裡面 bindable 相信大家都用過,其實這個是給編譯器看的,那編譯器到底做了什麼呢?今天特地去研究了下 首先在fb的flex編譯器裡面加上編譯引數 keep generated actionscript true,然後會生成乙個generated目錄,裡面就是從mxml生成的as檔案。比...
(XF 2)Flex中Bindable的原理
bindable 元資料標籤,它在 中的作用就是向編譯器提供如何編譯程式的資訊。它的最大作用是使程式元件間的資料同步變得容易。在開發中通常用上bindable作用在檢視控制項上,如給它繫結乙個物件,則以後只需要在邏輯層更改這個物件的值,則檢視層的控制項資料會自動更新 同步 而不再需要手動去更新檢視。...
Flex中mx model和mx xml的使用
flex中mx model和mx xml的使用 這兩個標記都可以裝載資料,以供其他標記用dataprovider使用.從後台得到的資料一般為xml格式的比較多,但在flex中得到這個xml,好像都不能直接裝載入像list,combox,linkbar等標記中,必須先載入mx model或mx xml...