我在.as文件中有一个外部类,我的问题是我无法在舞台上访问元素。诸如stage.txtfield.text或this.parent.txtfield.text之类的代码无效。 txtfield是动态文本字段的实例名称。

最佳答案

这取决于外部类。

如果它扩展了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);
    }
}


请注意,此代码不会检查文本字段是否确实存在。您应该首先检查并抛出适当的错误以使调试更加容易。

08-07 04:42