Flex Component Life-cycle

26
Flex Component Life-cycle

description

Flex Component Life-cycle. What is it?. Sequence of steps that occur when you create a component object from a component class. As part of this process, Flex automatically calls component methods, dispatches events, and makes the component visible. Component Life-cycle steps. Creation - PowerPoint PPT Presentation

Transcript of Flex Component Life-cycle

Page 1: Flex Component Life-cycle

Flex Component Life-cycle

Page 2: Flex Component Life-cycle

What is it?

Sequence of steps that occur when you create a component object from a component class.

As part of this process, Flex automatically calls component methods, dispatches events, and makes the component visible.

Page 3: Flex Component Life-cycle

Component Life-cycle steps

Creation Construction Configuration Attachment Initialization

Life Invalidation Validation

Page 4: Flex Component Life-cycle

Creation – Construction

Purpose Create an instance of a component class Configure the object by setting its initial properties

Examples In Actionscript:

var b:Button = new Button(); b.label = “test”; b.addEventListener(MouseEvent.CLICK, onClick);

In MXML <mx:Button label=”test” click=”onClick(event)” />

Page 5: Flex Component Life-cycle

Creation – Configuration

Purpose Set initial properties with setters

Generic setter features Check to see if the value has changed Set a private instance of the value Set a boolean flag to indicate the property has changed Schedule component for invalidation (if necessary) Dispatch binding events (optional)

Adobe does this in their component framework.

Page 6: Flex Component Life-cycle

Creation – Configuration

Check to see if the value has changedprivate var _label:String = “”;private var _labelChanged:Boolean = false;

public function set label (value:String):void {if (_label != value) {

}}

Page 7: Flex Component Life-cycle

Creation – Configuration

Set a private instance of the new valueprivate var _label:String = “”;private var _labelChanged:Boolean = false;

public function set label (value:String):void {if (_label != value) {

_label = value;

}}

Page 8: Flex Component Life-cycle

Creation – Configuration

Set a boolean flag to indicate the value changeprivate var _label:String = “”;private var _labelChanged:Boolean = false;

public function set label (value:String):void {if (_label != value) {

_label = value;_labelChanged = true;

}}

Page 9: Flex Component Life-cycle

Creation – Configuration

Schedule component for invalidation (optional)private var _label:String = “”;private var _labelChanged:Boolean = false;

public function set label (value:String):void {if (_label != value) {

_label = value;_labelChanged = true;invalidateProperties();invalidateSize();invalidateDisplayList();

}}

Page 10: Flex Component Life-cycle

Creation – Configuration

Dispatch binding events (optional)private var _label:String = “”;private var _labelChanged:Boolean = false;

public function set label (value:String):void {if (_label != value) {

_label = value;_labelChanged = true;invalidateProperties();invalidateSize();invalidateDisplayList();

dispatchEvent(new Event(“labelChanged”));}

}

Page 11: Flex Component Life-cycle

Creation – Configuration

Dispatch binding events (optional)

[Bindable(“labelChanged”)]public function get label ():String {

return _label;}

Page 12: Flex Component Life-cycle

Creation – Attachment

Purpose Attach the component to the display list.

Component life-cycle is stalled after configuration until attachment occurs

In Actionscript: panel.addChild(button);

In MXML: Don't need to do anything, the child is automatically

added according to how it is nested. <mx:Panel id=”panel” > <mx:Button id=”button” /> </mx:Panel>

Page 13: Flex Component Life-cycle

Creation – Initialization

Consists of 1 life-cycle phase and 3 events

“preinitialize” event is dispatched on the component Component is in a very raw state. Its children have not yet

been added (including internal children) Use this event in rare circumstances (set the properties on a

parent before the children are created)

createChildren() method is called by Flex on the component

override this method from UIComponent Add child components that make up your custom component Construct component, set properties, add to display list

Page 14: Flex Component Life-cycle

Creation – Initialization

Consists of 1 life-cycle phase and 3 events

“initialize” event is dispatched At this point, the component's children have been added and

the component's initial properties are set, but it has not been sized, positioned, or processed for layout

Use this event to perform additional processing before layout

“childAdd” event is dispatched from parent If the parent is also being initialized, its “initialize” event is

dispatched when all of its children are added.

Page 15: Flex Component Life-cycle

Life – Invalidation

Deferred Validation

Flex uses a deferred validation for rendering components in their various states

Central concept in the component life-cycle Use private variables and boolean flags to defer setting

any render-related properties until the proper validation method is reached

Page 16: Flex Component Life-cycle

Life – Invalidation

Deferred Validation

3 methods that trigger validation methods invalidateProperties() --> commitProperties()

Use this to set any of the component's properties invalidateSize() --> measure()

Use this to change the component's default size invalidateDisplayList() --> updateDisplayList()

Use this to change the component's size or position

Page 17: Flex Component Life-cycle

Life – Validation

Purpose Apply the changes deferred until validation

3 Phases occur in validation commitProperties() measure() updateDisplayList()

Page 18: Flex Component Life-cycle

Life – Validation

commitProperties() Purpose

Commit any changes to component properties Synchronize changes to occur at the same time or ensure that

they are set in a specific order When is it called?

Immediately after the initialize event during component creation

Whenever invalidateProperties() is called What is its phase order

This method is called before measure() or updateDisplayList()

This allows you to set property values that influence size or position

Page 19: Flex Component Life-cycle

Life – Validation

commitProperties() Example

Page 20: Flex Component Life-cycle

Life – Validation

measure() Purpose

Calculate the component's preferred width and height and its preferred minimum width and height

When is it called? After commitProperties() during initialization When the invalidateSize() method is called NOTE: measure() will never be called if the component is

given an explicit width or height What is its phase order?

After commitProperties() and before updateDisplayList()

Page 21: Flex Component Life-cycle

Life – Validation

measure() Caveats

Only 4 properties should normally be set in measure() measuredHeight

The default height of the component measuredWidth

The default width of the component measuredMinHeight

The default minimum height of the component measuredMinWidth

The default minimum width of the component Use getExplicitOrMeasuredHeight() and

getExplicitOrMeasuredWidth() to get child proportions.

Page 22: Flex Component Life-cycle

Life – Validation

measure() Example

Page 23: Flex Component Life-cycle

Life – Validation

updateDisplayList() Purpose

To position and size children Allow use of the Drawing API to draw on the component

When is it called? After measure() during the initialization process When invalidateDisplayList() is called

What is it's order? After measure()

Page 24: Flex Component Life-cycle

Life – Validation

updateDisplayList() Caveats

Position children using move(x, y), size them using setActualSize(width, height) instead of using the x, y, width, height properties

Adobe recommends these methods because they work better with Container layouts.

These methods are said to be quirky at times, so if they don't work for some reason just set the properties manually.

Page 25: Flex Component Life-cycle

Life – Validation

updateDisplayList() unscaledWidth, unscaledHeight

Arguments for updateDisplayList() Indicate the width and height of the component as dictated

by its parent. They do not take scaleX and scaleY properties into account,

so you will have to calculate scaling manually if needs be. “updateComplete” event is dispatched by the

component after its updateDisplayList() is executed Use this event for actions that must be performed each time

a component's characteristics change, not just when it is created.

Page 26: Flex Component Life-cycle

Life – Validation

updateDisplayList() Example