0

说我有一个对象

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

有没有办法向值添加事件侦听器,例如

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

我在时间轴上有一个长长的(ish)按钮列表(布局因部分而异,所以在时间轴上做更有意义,而不是尝试通过动作脚本构建布局)。

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

等等....所以我只是想将所有内容存储在一个数组中

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

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

4

3 回答 3

1

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

于 2012-05-03T18:04:07.467 回答
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()为此目的,但这些时代早已一去不复返了。为了好。:)

于 2012-05-03T18:19:04.287 回答
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);
于 2012-05-03T21:36:09.547 回答