我已经通过论坛帖子和教程完成了很多阅读,但我仍然无法围绕事件和事件监听器。我有一个非常简单的例子,但我无法让它发挥作用。
我在转发器中有一个自定义对象的arrayCollection,当单击其中一个对象时,我想要一个不同的组件来显示与该对象关联的数据。
这就是我所拥有的,但是监听器从不响应(调度程序似乎正在工作,因为新事件已创建,我可以看到具有正确输出的跟踪。)我怀疑这是因为当我调用addEvent Listener时,我是在错误的对象上这样做的。我的理解是,显示对象数据的对象是应该拥有事件监听器的对象,并监听这种性质的所有事件,但也许我误解了。
我的自定义活动:
public class SelectObjectEvent extends Event
{
public function SelectObjectEvent(customEventString:String, myObject:customObject)
{
super(customEventString, true, false);
trace(customEventString+" "+myObject);
}
}
}
我的自定义对象具有以下功能,可在单击时调用:
public function selectObject(myObject:customObject):void
{
dispatchEvent(new SelectObjectEvent("OBJECT_SELECTED", customObject));
}
我想要显示所选对象的组件具有以下构造函数:
public function SelectedObjectDisplayClass()
{
addEventListener("OBJECT_SELECTED", this.showObject)
}
public function showObject(event:Event):void
{
trace("Show object: "+event);
}
答案 0 :(得分:3)
目前还不是很清楚你最后两个代码块的位置,但看起来你需要在扩展addEventListener
的对象上调用EventDispatcher
。
也就是说,如果您的第二个块属于一个名为Clickable
的自定义对象,该对象扩展EventDispatcher
并在单击时调用dispatchEvent()
,那么您的组件应该调用myClickable.addEventListener(...)
其中myClickable是Clickable的一个实例。那有意义吗?
但假设您的第3个代码块与第二个代码块不在同一个类中,那么它看起来并不像您那样做。你正在为拥有第三块代码的类添加一个监听器,我收集的不是扩展EventDispatcher
的那个。
答案 1 :(得分:0)
快速浏览一下您的代码,注意您的dispatchEvent第二个参数是该类而不是该对象的实例。这不应该是myObject吗?
public function selectObject(myObject:customObject):void
{
dispatchEvent(new SelectObjectEvent("OBJECT_SELECTED", **customObject**));
}