我在.as文件中有一个外部类,我的问题是我无法访问舞台上的元素。像stage.txtfield.text或this.parent.txtfield.text这样的代码不起作用。 txtfield是动态文本字段的实例名称。
答案 0 :(得分:6)
这取决于外部课程。
如果它扩展了DisplayObject(或DisplayObject的任何孙子),只要将它添加到显示列表(即将它添加到舞台或显示器上的任何其他DisplayObjectContainer时),您就可以使用stage属性进行访问。列表)。
要监听它,请在外部类中使用以下代码:
addEventListener(Event.ADDED_TO_STAGE, AddedToStage);
//...
private function AddedToStage(e:Event):void
{
trace("TextField text" + TextField(stage["textfield"]).text);
}
如果它不是displayObject或者它不会出现在显示列表中,那么最好的方法是在构造函数或单独的方法调用中为它提供它需要访问的对象(如TextField) 。 你可以给它一个自己的阶段的引用,但是如果你需要类来操作MovieClip中的TextField,那就不是很通用了。
您可以使用以下代码参考TextField:
//In any DisplayObject on the display list (could be inside a MovieClip or on the Stage itself)
var manipulator:MyClass = new MyClass(TextField(stage["textfield"]));
//In the external class
public class MyClass
{
publich function MyClass(txt:TextField)
{
trace("TextField text" + txt.text);
}
}
请注意,此代码不会检查文本字段是否确实存在。您应该首先检查它并抛出正确的错误以使调试更容易。
答案 1 :(得分:1)
root和stage不再是全局的,因此如果您希望在外部类中使用它们,则需要通过文档根类公开它们。