我有一个应用程序,我需要动态创建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
添加元素?
答案 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;
}
}
}