【问题标题】:Actionscript reference to child element对子元素的操作脚本引用
【发布时间】:2013-12-17 04:26:04
【问题描述】:

如何引用在运行时添加的子元素?

示例代码:

for(var i:Number=1; i<=5;i++){
    var mygroup:HGroup = new HGroup();

    var mybutton:Button = new Button();
    mybutton.label = "Browse Directory";
    mybutton.addEventListener(MouseEvent.CLICK,browsedirectory);

    var dirlbl:Label = new Label();
    dirlbl.text = "C:/some directory/";
    dirlbl.id = "path"+i;

    mygroup.addElement(mybutton);
    mygroup.addElement(dirlbl);
    mygroup.id = "group"+i;
    mainGroup.addElement(mygroup);
}

public function updatepath():void
{
    this["path1"].text = "new path";
}

当我试图通过调用this["path1"].text = "new path";来更改标签中的目录路径时,它遇到了错误

Error #1069: Property path1 not found and there is no default value.

如何引用这些子元素?

谢谢。

【问题讨论】:

  • 代码中的“this”指的是什么?
  • 'this' 来自根目录。
  • 检查这些链接link1link2

标签: actionscript-3 flash


【解决方案1】:
Caution, code not tested!

您可以首先检查特定容器中的所有元素(根据您自己的知识):

private function displayChildren(element):void {
    for (var i = 0; i < element.numChildren; i++){
        var child = element.getChildAt(i);

        if (child != null) {
            trace ('position: '+i+' child name:' + child.name);

            for (var j = 0; j < child.numChildren; j++){
                displayChildren(child.getChildAt(j));
            }
        }
    }
} 

displayChildren(mainGroup);

这应该输出如下内容:

trace= position: 0 child name : "group1";     <- HGroup 
trace= position: 0 child name : undefined;    <- Button without id
trace= position: 1 child name : "path1";      <- Label
...

因此,按照此操作,您应该能够通过以下方式访问标签:

mainGroup["group1"]["path1"].text = "new path text";

-------- 更新 -------------- -

如果您执行以下操作会发生什么?

var vgroup = mainGroup.getChildByName("group1");
if (vgroup != null) {
    trace(vgroup.id)
    var label = vgroup.getChildByName("path1");
    if (label != null) {
        trace(label.id)
        label.text = "change label text"
    }
}

你有输出吗?

【讨论】:

  • 感谢您的回答。所有元素都在容器中。但是当我用你的例子引用它时,它仍然会抛出错误Error #1069: Property group1 not found on spark.components.VGroup and there is no default value.
  • @user1995781 - 如果解决方案有效 - 请接受答案,或者如果您需要更多信息,请告诉我。
  • 嗨,戴夫。非常感谢您的帮助和时间。对此,我真的非常感激。实际上我所做的是在 flex 项目中使用 Actionscript 添加元素。老实说,我没有让它与动作脚本一起使用。所以,我的解决方案是改用 MXML 组件,向其中添加新元素。
  • 不用担心,如果你解决了,那就太酷了 ;-) Flex 与 Flash 有很大不同,但我确实鼓励在 Flash 上使用它来用于桌面和需要开发的更复杂的图形应用程序尽快。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-27
  • 2017-06-27
  • 2022-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多