说我有一个对象
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来获取帧标签值...
答案 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);