初始化检测到动态附着的组件的Flash AS2

好吧,让自己发疯,试图在这里记住AS2,希望有更好记忆的人伸出援手... 基本上,我的问题是使用合成和组件的“等待”-例如。一个Button组件-准备附加一个点击处理程序。由于各种原因,我无法对整个设置做任何事情,所以这里就是这种情况... 我的库中有动画片段,没有类,只有链接ID(\“ AttachMe \”)。该剪辑内部有一个AS2按钮组件(\'btn \')。 我有一个类,它获取对时间轴的引用,然后从库中附加mc,然后向按钮添加事件侦听器。简单吧?
var foo:Foo = new Foo(this);

class Foo {

    private var tl:MovieClip; // timeline
    private var mc:MovieClip; // the attached movieclip

    function Foo(t:MovieClip){
        tl = t;
        mc = tl.attachMovie(\"AttachMe\", \"mc\", 10);
        var b:Button = mc.btn;
        b.addEventListener(\"click\", Delegate.create(this, onClick));
    }
    private function onClick(e:Object):Void{
        trace(\"Hi!\");
    }
}
这是行不通的,因为在执行此操作时b.addEventListener尚未定义... 真的,这里的最佳做法是什么?即这是一个真正的痛苦,我知道在添加事件处理程序之前要“等待”按钮组件(在这种情况下)进行初始化的情况是这样。 可以做一个间隔/超时-讨厌这样的想法。可以在mc上执行enterFrame,在第一次调用时将其清除,然后再次添加处理程序。 onLoad不会为movieclip触发,因此无法添加该内容(如果我使用了继承和movieclip库的自定义子类,则可以使用onLoad)。 每种方式似乎都是一种hack俩,多次尝试的想法令人沮丧!多年来,它肯定已经死了,但是我真的找不到直接提及该问题和可接受的解决方案的东西。 任何想法表示赞赏! 丰富     
已邀请:
        正确,第三次尝试,我已将其他答案标记为删除。进入UIObject和Button类后,我想到了这一点,这似乎可行:
import mx.utils.Delegate;
import mx.controls.Button;
import mx.events.EventDispatcher;

class Foo {

    private var tl:MovieClip; // timeline
    private var mc:MovieClip; // the attached movieclip

    function Foo(t:MovieClip)
    {
        tl = t;
        mc = tl.attachMovie(\"AttachMe\", \"mc\", 10);
        var b:Button = mc.btn;
        EventDispatcher.initialize(b);
        b.addEventListener(\"click\", Delegate.create(this, onClick));
    }
    private function onClick(e:Object):Void
    {
        trace(\"Hi!\");
    }
}
这个重要的位是ѭ2,这似乎迫使这些方法立即存在。     

要回复问题请先登录注册