【问题标题】:Flex 4 - Create states and add elements at runtime from actionscriptFlex 4 - 在运行时从 actionscript 创建状态和添加元素
【发布时间】:2010-09-28 12:49:07
【问题描述】:

我想动态地(在运行时)向容器添加新的状态,并为这个状态添加不同的元素(如 TextInput、Label 等)。这必须从 actionscript 完成,我不使用任何 mxml 文件。我可以为不同的元素添加状态并更改属性或样式,但我不知道如何为不同的状态添加子元素。

【问题讨论】:

    标签: apache-flex


    【解决方案1】:

    您必须手动创建 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>
    

    【讨论】:

    • 感谢您的快速回复。
    • 这个我已经想通了,但是我想在特定的自定义状态中添加新元素,例如:TextInput、Label 等,这样我就可以在运行时为动态创建的不同状态显示不同的元素。
    • 同样的概念适用,只是您使用 AddItems 或 AddChild 替代。使用前者将子级添加到 Spark (Flex 4) 容器,后者用于 MX (Flex 3) 组件。我更新了示例以展示它在此应用程序中的工作方式。
    • 非常感谢。很有帮助。最好的问候,克里斯蒂
    猜你喜欢
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    相关资源
    最近更新 更多