如何为状态动态创建Flex 4 AddChild操作?

时间:2010-12-27 21:48:11

标签: flex actionscript-3 state

我有一个应用程序,我需要动态创建mx.states.State个对象,因为我正在读取外部数据以创建状态。每个State只有一个孩子,所以这是我用来完成此任务的代码:

var state:State = new State();
state.name = "a";
state.overrides = [new AddChild(parent, DisplayObject(view))];
this.states.push(state);

但是,当我实际更改状态时,我会收到与您无法在addChild组件上调用spark.components.Group相关的运行时错误。在状态更改期间是否有相应的AddElement操作用于向Group添加元素?

2 个答案:

答案 0 :(得分:2)

您必须将AddItems类用于spark元素。我之前提供过answer类似的问题,可能会有所帮助。

答案 1 :(得分:1)

解决方案很简单,但仍然存在一个很大的问题:为什么Flex SDK默认不包含这样的类? Flex 4如何在不使用下面的类的情况下实现这一目标?

无论如何,这是班级。

package mx.states {
    import mx.core.IVisualElementContainer;
    import mx.core.IVisualElement;
    import mx.core.UIComponent;
    import mx.states.IOverride;
    import mx.utils.OnDemandEventDispatcher;

    /**
     * @author rfkrocktk
     */
    public class AddElement extends OnDemandEventDispatcher implements IOverride {

        private var _target:IVisualElement;

        private var _relativeTo:IVisualElementContainer;

        public function AddElement(relativeTo:IVisualElementContainer = null,
                target:IVisualElement = null) {
            this.relativeTo = relativeTo;
            this.target = target;
        }

        public function initialize() : void {

        }

        public function apply(parent : UIComponent) : void {
            this.relativeTo.addElement(this.target);
        }

        public function remove(parent : UIComponent) : void {
            this.relativeTo.removeElement(this.target);
        }

        [Bindable]
        public function get target():IVisualElement {
            return _target;
        }

        public function set target(value:IVisualElement):void {
            _target = value;
        }

        [Bindable]
        public function get relativeTo() : IVisualElementContainer {
            return _relativeTo;
        }

        public function set relativeTo(relativeTo : IVisualElementContainer) : void {
            _relativeTo = relativeTo;
        }
    }
}