public class MyGroup extends Group
{
public function MyGroup()
{
super();
var myLabel:Label = new Label();
myLabel.id = "myLabel";
myLabel.text = "My label!";
this.addElement(myLabel);
} etc.
这个自定义组件做了我期望的事情;它看起来像带有text =“My label!”的标签控件。
问题:有没有办法在项目的其他地方引用myLabel标签控件(例如更改文本)?
目前,我可以进入内部标签控件的唯一方法是调用类似myGroup.getElementAt(0)的内容。
我意识到将标签变成类变量会更有意义 - 我只是想知道这段代码是如何工作的。
答案 0 :(得分:2)
您可以让公共设置器更改文本标签:
public class MyGroup extends Group
{
private var _label:Label=new Label();
public function set label(value:String):void{
_label.text=value;
}
public function MyGroup()
{
super();
_label.id = "myLabel";
label = "My label!";
addElement(_label);
}
.....
}
var myGroup:MyGroup=..
myGroup.label="Hello";
在您的情况下,因为您在var
内声明了myLabel
function
,所以它的范围仅适用于此function
答案 1 :(得分:0)
在ActionScript中,变量是命名句柄,您可以使用这些句柄来获取对象和数据。变量有一些叫做 scope 的东西,它指定句柄的哪些部分是有效的。
在函数内部创建变量时,其范围是该函数。也就是说,特定的命名句柄只能在该函数中使用。
在您的代码中,您创建一个名为myLabel
的句柄,并在其中放置Label
- 让我们称之为Label123
。接下来,您将Label123
放入MyGroup
的元素列表中,这会为MyGroup
提供一个附加到Label123
的句柄。然后函数结束,名为myLabel
的句柄不再可用。 Label123
仍然存在,因为MyGroup
有句柄。
如果您将myLabel
创建为private
或protected
类变量,则该句柄可以从MyGroup
内的任何函数中使用。如果您将其创建为public
类变量,则它可以在MyGroup
内的任何位置使用,也可以在代码中具有MyGroup
实例的任何位置使用。 (如果您将其创建为internal
类变量,它将可用于包MyGroup
内的任何位置。)