AS3如何通过他的id访问inruntime创建的元素?

时间:2013-07-22 22:11:33

标签: actionscript-3 flash-builder mxml

所以我有一个简单的应用程序,有一个hgroup,我添加一个元素。但是当我使用this.newobject.Somthings时,我无法访问该对象。

在我的mxml相关代码中我有:

<s:Hgroup id="headder1" height="25"/>

并在我的“表单创建完成我有”:

var a:Button = new Button;
a.id='button1';
a.label = 'hello';
headder1.addElement(a);

因此,当我尝试使用任何其他代码来执行此类操作时:

var e:String;
e=this.button1.label

我收到错误。导致没有button1可访问。即使我调试代码,这下面没有button1 ....而不是在headder1 .... 所以我不知道如何工作。 感谢。

2 个答案:

答案 0 :(得分:0)

是的,在其他代码中你必须指向a.label,因为你已经创建了:

var a:Button = new Button;

所以你必须参考。

您尝试使用以下组件的组件名称进行引用:

headder1.getChildByName(NAME OF YOUR BUTTON)

但是你把

a.name = NAME OF YOUR BUTTON

告诉我它是否正常。

答案 1 :(得分:0)

id在经典意义上不属于UIComponent的属性。在ActionScript中设置不能。在MXML中设置ID时,它会在编译时使用该ID在生成的AS3类中创建一个公共变量,早在实际运行之前。 MXML实际上并不在运行时运行。相反,编译器使用MXML在编译时生成ActionScript类,在运行时生成

如果我没记错的话,如果你确实得到了另一个问题,并检查了它id,那就不是你设置的了。

因此,您需要在AS3中保存对按钮的引用,或者设置其名称,遍历其父级,并以此方式获取对象。

所以这样做:

private var button1:Button;
private function formCreationComplete(e:Event ):void {
    this.button1 = new Button;
    this.button1.id='button1';
    this.button1.label = 'hello';
    headder1.addElement( this.button1 );
}

然后,你可以这样做:

var e:String;
e = this.button1.label;