在as3中添加自定义事件侦听器

时间:2009-05-24 22:00:41

标签: actionscript-3 events flex3

我已经通过论坛帖子和教程完成了很多阅读,但我仍然无法围绕事件和事件监听器。我有一个非常简单的例子,但我无法让它发挥作用。

我在转发器中有一个自定义对象的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); 
        } 

2 个答案:

答案 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**));                          
        }