flex的失效機制

2021-06-04 16:08:27 字數 1343 閱讀 5669

一、什麼是失效機制

flex 使用「失效機制(invalidation mechanism)」來同步元件的更改。flex 用一系列方法的呼叫,比如在setter方法內監控乙個變更變數來標記元件的某些東西已經發生變化, 然後在下乙個「渲染事件(renderevent)」 中觸發元件的commitproperties(), measure(), layoutchrome(),updatedisplaylist()檢查這些布林變數來完成最終的變更邏輯。這樣做的額外好處就是setter方法可以更迅速地返回,把對新屬性值的處理留給了commitproperties()方法。

二、為什麼使用失效機制

一種情況是,當設定了元件的多個屬性後,比如button 控制項的label 和icon 屬性,我們需要所有屬性被設定後一次性執行commitproperties(), measure(), updatedisplaylist()方法,而不是設定過label 屬性後執行一遍這些方法,然後在設定icon屬性後又執行一次這些方法。

另一種情況是幾個元件同時更改了它們的字型大小。程式更改字型大小的執行速度大大快於flex 更新應用的速度,因此要在確定最終更改字型之後才開始更新布局。另外,flex 需要協調布局操作以消除任何冗餘過程,而不是在每個元件更新它的字型大小之後都執行一次布局操作。

三、失效方法的聯絡

失效方法及其對應的觸發函式如下:

1. invalidateproperties() 通知元件,以使下次螢幕更新時,它的commitproperties()方法被呼叫。

2. invalidatesize() 通知元件,以使下次螢幕更新時,它的measure()方法被呼叫。

3. invalidatedisplaylist() 通知元件,以使下次螢幕更新時它的layoutchrome()方法和updatedisplaylist()方法能被呼叫。

當元件呼叫乙個「失效」方法時,它就通知flex該元件已經被更新。當多個元件呼叫失效

方法,flex 會在schedules中協調這些更新,以使這些更新操作在下一次螢幕更新時一起執行。注意,createchildren()沒有對應的失效方法,它會在呼叫後被立即執行。

四、迴圈週期中我們可以遵循以下的規則

1.如果屬性需要改變子元件的乙個屬性時,呼叫invalidateproperties()同時重寫commitproperties()方法。

2.如果屬性需要改變當前元件上的一些可見的內容時,呼叫invalidatedisplaylist()方法同時重寫 updatedisplaylist()方法。

3.如果屬性影響了元件的大小,呼叫invalidatesize()方法並重寫measure()方法。

flex失效機制,失效方法,失效階段

一 什麼是失效機制 flex 使用 失效機制 invalidation mechanism 來同步元件的更改。flex 用一系列方法的呼叫,比如在setter方法內監控乙個變更變數來標記元件的某些東西已經發生變化,然後在下乙個 渲染事件 renderevent 中觸發元件的commitpropert...

Flex事件機制

事件流按執行流程分為3步 1 捕獲階段 捕獲事件 capturing,從根節點開始順序而下,檢測每個節點是否註冊了 同時,flex 將事件物件的currenttarget 值改為當前正在檢測的物件。如果註冊了 則呼叫監聽函式。2 目標階段 檢測目標的 targeting 觸發在目標物件本身註冊的監聽...

Flex事件機制

flex事件機制是觀察者模式,即首先要註冊事件,事件分發後通過事件響應函式進行處理。例如在as3中 button.addeventlistener click onclick 向button註冊乙個click事件 internal function onclick evt mouseevent vo...