Actionscript3:如何从外部类访问舞台上的元素?

Geo*_*rge 2 actionscript-3

我在.as文件中有一个外部类,我的问题是我无法访问舞台上的元素.像stage.txtfield.text或this.parent.txtfield.text这样的代码不起作用.txtfield是动态文本字段的实例名称.

Jac*_*rdt 6

它取决于外部类.

如果它扩展DisplayObject(或DisplayObject的任何孙子),只要将它添加到显示列表(即将它添加到舞台或显示列表上的任何其他DisplayObjectContainer时),您就可以使用stage属性进行访问.

要监听它,请在外部类中使用以下代码:

addEventListener(Event.ADDED_TO_STAGE, AddedToStage);

//...

private function AddedToStage(e:Event):void
{
    trace("TextField text" + TextField(stage["textfield"]).text);
}
Run Code Online (Sandbox Code Playgroud)

如果它不是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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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