【问题标题】:ActionScript: programmatically adding children to a `mx:ViewStack`ActionScript:以编程方式将子代添加到 `mx:ViewStack`
【发布时间】:2015-09-04 22:28:49
【问题描述】:

我有一个 Flex mx:ViewStack 有一些 Flex 子级,但我想使用 ActionScript 添加更多。

var o:MyCanvas = new MyCanvas;
o.id = 'modRipley';
viewStack.addChild(o);
o = new MyCanvas;
o.id = 'modNewt';
viewStack.addChild(o);
o = new MyCanvas;
o.id = 'modGorman';
viewStack.addChild(o);

逐步检查,我没有看到 childDescriptors 成员(也没有 _childDescriptors)有任何增加,并且:

viewStack.getChildByName('modNewt');

只返回空值。

我正在使用 Flex 3.5 SDK。

【问题讨论】:

  • addChild 是正确的,但我不希望 childDescriptors 改变,因为它描述了 mxml 子项。我也不希望 getChildByName 在你的情况下工作,因为你没有给孩子一个名字。

标签: actionscript-3 apache-flex actionscript addchild


【解决方案1】:

而不是分配o.id = 'modNewt'; 使用o.name = 'modNewt'; 并尝试使用viewStack.getChildByName('modNewt'); 访问子级。它应该可以工作。

【讨论】:

  • 我知道id 是那些在 AS 中无法以正常方式处理的狡猾的 Flex 事情之一,但这就是我所知道的。谢谢。
【解决方案2】:

就像我的评论所说,使用addChild 是正确的,但您的其他代码没有用。 childDescriptors 是 Fl​​ex 框架用来构造 MXML 子项的,因此它不会反映在 ActionScript 中所做的动态更改。而getChildByName 要求孩子有一个name 值,而你没有给他们一个name,你给了他们一个id

通常,如果我想动态添加视图子项,我会执行 MXML 编译器对 MXML 子项所做的事情:创建在创建子项时引用子项的属性。例如:

public class Example extends SomeMxmlComponentWithViewStack {
    public var myCanvas1:MyCanvas;
    public var myCanvas2:MyCanvas;
    public var myCanvas3:MyCanvas;

    override protected function createChildren():void {
        super.createChildren(); // creates the MXML children
        viewStack.addChild(myCanvas1 = new MyCanvas());
        viewStack.addChild(myCanvas2 = new MyCanvas());
        viewStack.addChild(myCanvas3 = new MyCanvas());
    }
}

现在,您可以通过任何代码引用myCanvas1myCanvas2myCanvas3。当您在 MXML 中声明一个组件并给它一个 id 时,这基本上就是 MXML 编译器为您所做的。

【讨论】:

  • +1 了解如何“正确”处理 ActionScript 中的子实例。 (如果您只需要组件内的这些引用,则它们不需要公开。)
  • 如果我理解正确,我认为这对我不起作用,因为您似乎在创建 ViewStack 的同时创建了 MyCanvases。 ViewStack 的几个子代是在创建时创建的,但我的应用需要通过执行添加和删除子代。 (想想看,我可能也应该弄清楚如何删除它们)
  • 当然,您不必在createChildren 中执行此操作(这只是一个示例),您可以随时创建和删除。主要的一点是你有属性可以引用你的孩子(例如myCanvas1等),所以你不会忘记他们或需要使用脆弱的查找函数来查找孩子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多