繁体   English   中英

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

[英]How do I dynamically create Flex 4 AddChild actions for States?

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

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

但是,当我实际更改状态时,我收到一个运行时错误,原因是您无法在spark.components.Group组件上调用addChild 是否存在等效的AddElement操作,用于在状态更改期间将元素添加到Group

您必须将AddItems类用于spark元素。 之前,我已经为类似问题提供了答案 ,这可能会有所帮助。

解决方案很简单,但仍然存在一个大问题:默认情况下,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;
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM