如何从另一个类触发ActionScript 3.0中的自定义事件

时间:2010-11-13 11:25:10

标签: flex actionscript-3 events actionscript adobe

我想创建一个自定义事件,任何其他类都可以访问它。 假设我NavigationMenuClass.as包含一些next, prev buttons,另一个类Page.as应该在每个nextprev按钮按下时显示特定页面。 我需要创建一个自定义事件(将写一个EVENTClass.as来管理所有这些类型的事件。)调用"showPage",当这个事件发生时,需要调用Page.as类成员函数。

private function nextPress(event:Event) {
    //dispatchEvent(new Event("showPage"));
    // this will call the Page class Menmber function page:Page = new Page; page.showNextPage();
}

如果没有传递对象,我如何使用EventEvent Dispatcher方法调用特定成员函数。

2 个答案:

答案 0 :(得分:5)

你好像很困惑。

那么,你有一个显示层次结构,你的Page.as显示对象是NavigationMenuClass.as的父级,对吗?

您的NavigationMenuClass应为“next”和“previous”分派事件。 Page类应该监听这些事件并做一些事情。

您的代码已经完成了调度部分,尽管它已被注释掉了。我会把它放在按钮的点击处理程序中,然后用它来发送下一个或前一个事件:

private function nextPress(event:Event) {
    // dispatchEvent(new Event("showPage"));
    // this will call the Page class Menmber function page:Page = new Page; page.showNextPage();
    dispatchEvent(new Event("next"));
}

在您的Page.as中,您只需添加一个事件监听器:

navigationMenuClassInstance.addEventListener('next', onNext);
public function onNext(event:Event):void{
  // write code to change content
}

您可以使用相同的方法来实现上一个事件。解决一些“奇怪的措辞”

  

我想创建一个自定义事件   任何其他班级都可以访问

我不确定你的意思是什么 您可以创建一个扩展Event的自定义事件类,任何其他类都可以使用它,只要它导入它即可。我上面的示例不创建自定义事件类,但使用默认事件类。

在调度方面,事件只会调度到其父级。如果事件冒泡,它将转到它的父母,然后是父母的父母,依此类推,直到舞台上。

  

没有通过对象我怎么能   调用特定的成员函数   使用事件和事件调度程序   方法

我不确定你在这里“传递对象”是什么意思。分派事件时,该事件类始终可用作事件侦听器作为该事件侦听器方法的参数。这有点像传递一个物体。

答案 1 :(得分:1)

另外,在遵循Flextras优秀指南时,请确保NavigationMenuClass扩展EventDispatcher,否则只调用dispatchEvent()方法将无效!