我想创建一个自定义事件,任何其他类都可以访问它。
假设我NavigationMenuClass.as
包含一些next, prev buttons
,另一个类Page.as
应该在每个next
或prev
按钮按下时显示特定页面。
我需要创建一个自定义事件(将写一个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();
}
如果没有传递对象,我如何使用Event
和Event Dispatcher
方法调用特定成员函数。
答案 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()方法将无效!