Actionscript,对象和事件侦听器

时间:2012-05-03 17:53:56

标签: actionscript event-handling

说我有一个对象

var my_obj = new Object();
my_obj['key'] = value;

是否有办法向该值添加事件侦听器,例如

my_obj['key'].addEventListener(Blah Blah);

我在时间轴上有一个很长的(ish)按钮列表(布局在各个部分之间是如此不同,只是在时间轴上更有意义而不是尝试通过actionscript构建布局)。

button1 = plays "frame label 1"
button2 = plays "frame label 2"

依此类推......所以我只想把所有东西都存放在一个数组中

obj["button1"] = "framelabel1"
arr.push(obj);

然后我可以为所有按钮设置一个事件处理程序,并使用target来获取帧标签值...

3 个答案:

答案 0 :(得分:1)

如果值为IEventDispatcher或扩展EventDispatcher,则可以向其添加侦听器。

答案 1 :(得分:1)

这个问题对我来说相当模糊。我的猜测是,每次设置值时都需要触发某些内容。如果是这种情况,那么您必须创建一个自定义类,并在那里声明一个getter-setter属性。

例如:

package
{
    import flash.display.Sprite;

    public class TestAccessor extends Sprite
    {
        private var someVarValue:uint = 0;

        public function TestAccessor()
        {
            super();
        }

        public function get someVar():uint
        {
            return someVarValue;
        }

        public function set someVar(value:uint):*
        {
            someVarValue = value;
            // this is the place where someVar is set.
            // do whatever else you like here,
            // you may choose to dispatch an event from here if you need.
        }

    }
}

回到AS1-AS2时代,出于此目的我们有watch()addProperty(),但这些时间很久以来就消失了。好的。 :)

答案 2 :(得分:1)

是的,您可以按照您提到的确切方式完成您的问题,这是一个例子:

var value:Sprite = new Sprite();

var my_obj = new Object();
my_obj['key'] = value;

所以打电话:

my_obj['key'].addEventListener(Event.ENTER_FRAME, _onEnterFrameHandler);

与调用完全相同:

value.addEventListener(Event.ENTER_FRAME, _onEnterFrameHandler);