【发布时间】:2010-09-28 12:49:07
【问题描述】:
我想动态地(在运行时)向容器添加新的状态,并为这个状态添加不同的元素(如 TextInput、Label 等)。这必须从 actionscript 完成,我不使用任何 mxml 文件。我可以为不同的元素添加状态并更改属性或样式,但我不知道如何为不同的状态添加子元素。
【问题讨论】:
标签: apache-flex
我想动态地(在运行时)向容器添加新的状态,并为这个状态添加不同的元素(如 TextInput、Label 等)。这必须从 actionscript 完成,我不使用任何 mxml 文件。我可以为不同的元素添加状态并更改属性或样式,但我不知道如何为不同的状态添加子元素。
【问题讨论】:
标签: apache-flex
您必须手动创建 State 类的实例并为其创建覆盖。然后将新创建的状态添加到组件的 states 数组中。
这里有一个小示例空气应用程序,展示了如何做到这一点:
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
import mx.states.AddChild;
import mx.states.AddItems;
import mx.states.SetProperty;
import mx.states.State;
protected function createState(event:MouseEvent):void
{
var label:Label = new Label();
label.text = "World!";
var addLabel:AddItems = new AddItems();
addLabel.relativeTo = foo;
addLabel.position = "after";
addLabel.items = label;
var helloWorld:State = new State();
helloWorld.name = "helloWorld";
helloWorld.overrides = [addLabel];
states = [helloWorld];
currentState = "helloWorld";
}
]]>
</fx:Script>
<s:layout>
<s:VerticalLayout />
</s:layout>
<s:Label id="foo" text="Hello" />
<s:Button label="Create new state" click="createState(event)" />
</s:WindowedApplication>
【讨论】: