Applying States

By default, the base state is applied to an application or component. You can define many states for each application and component, but you can apply only one state at any one time. You can apply a state using the currentState property. Example 12-1 defines a state that adds a checkbox (see Adding and Removing Components” later in this chapter for details on adding components to states). The state is applied when the user clicks the button in the base state.

Example 12-1. Applying a state

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">

    <mx:VBox id="vbox">
        <mx:Button label="Add Checkbox" click="currentState='newCheckbox';" />
    </mx:VBox>

    <mx:states>
        <mx:State name="newCheckbox">
            <mx:AddChild relativeTo="{vbox}">
                <mx:CheckBox id="checkbox" label="New Checkbox" />
            </mx:AddChild>
        </mx:State>
    </mx:states>

</mx:Application>

Note that the value of the currentState property is a string specifying the name of the state to apply. In the preceding example, when the user clicks the button, the value of newCheckbox is assigned to the currentState property of the application. The Flex framework then looks for a state with a name attribute of newCheckbox and applies that state. In the preceding example, the state with the name of newCheckbox uses an <mx:AddChild> tag to add a new checkbox to the VBox instance. If you want to return to the base state, you can assign a null value or an empty string to the currentState property. Example 12-2 demonstrates how this works by adding a second button that returns the application to the base state.

Example 12-2. Returning to the base state

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">

    <mx:VBox id="vbox">
        <mx:Button label="Return to Base State" click="currentState='';" />
        <mx:Button label="Add Checkbox" click="currentState='newCheckbox';" />
    </mx:VBox>

    <mx:states>
        <mx:State name="newCheckbox">
            <mx:AddChild relativeTo="{vbox}">
                <mx:CheckBox id="checkbox" label="New Checkbox" />
            </mx:AddChild>
        </mx:State>
    </mx:states>

</mx:Application>

Figure 12-1 and Figure 12-2 show the two states created from Example 12-2.

The base state

Figure 12-1. The base state

The newCheckbox state

Figure 12-2. The newCheckbox state

The currentState property is a property inherited from the UIComponent class. That means each application and each component has its own currentState property, and you can set the states of each independently. Another way to say this is that setting the currentState property for component A changes the state for component A only, and setting the currentState property for component B changes the state for component B only.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset