我有一个可以扩展NavigatorContent的actionscript类MyClass。我将该类实例化为Accordion组件的自定义MXML NavigatorContnent组件。 MyClass有一个我试图附加事件监听器的Button组件。我想让事件冒泡,以便我可以在Accordion组件中使用处理程序。
MyClass的
package comp
{
import flash.events.Event;
import flash.events.MouseEvent;
[Event(name="selectEvent", type="flash.events.Event")]
public class MyClass extends NavigatorContent
{
public function MyClass()
{
super();
btnSelect.addEventListener(MouseEvent.CLICK, selectClickDispatcher);
}
public function selectClickDispatcher(event:MouseEvent):void
{
event.currentTarget.dispatchEvent(new Event("selectEvent",true));
}
}
}
从这里我将实例化的组件嵌套在Accordion中。我很确定问题出在这个类定义中,因为当我在selectClickHandler上设置断点时,代码不会中断。如果我错了,我会发布其余的组件。
名为MySubComp.mxml的自定义组件
<comp:MyClass
...I have a few more spark components here and nothing else...
/>
手风琴
<mx:Accordion>
<fx:Script> //omitted CDATA tags to save space
protected function selectEventHandler(event:Event):void
{
Alert.show("Value Selected");
}
</fx:Script>
//custom components are in the navs package
<navs:MySubComp selectEvent = "selectEventHandler(event)"/>
</mx:Accordion>
答案 0 :(得分:2)
您已将元数据添加到类定义
[Event(name="selectEvent", type="flash.events.Event")]
所以你需要在mxml中做的只是
<comp:MyClass selectEvent="event_handler(event)"
..... />
在AS3中,您可以通过
添加事件监听器myClass.addEventListener("selectEvent", event_handler);
P.S。您的课必须扩展EventDispatcher
答案 1 :(得分:1)
您的课程要么需要扩展DisplayObject
类,要么直接从EventDispatcher
继承,以便能够使用事件。忘记实现IEventDispatcher
因为某处有一段特殊的黑色代码,这意味着EventDispatcher
是唯一可以设置target
类的Event
属性的类(I')我以前试过了。)
考虑使用其他替代方案。 Flash中的事件往往很慢并且一直在创建对象。如果你需要简单的东西,回调是一个很好的系统。
public class A
{
public var onSomething:Function = null;
public function foo():void
{
if( this.onSomething != null )
this.onSomething();
}
}
public class B
{
public function B()
{
var a:A = new A;
a.onSomething = this._somethingCalled; // set the callback
a.init();
}
private function _somethingCalled():void
{
trace( "hello there" );
}
}
您还可以查看信号项目:https://github.com/robertpenner/as3-signals/wiki
信号远远优于普通Flash事件,并且对可以使用它们的对象类型没有限制(即非DisplayObject对象仍然可以添加事件侦听器和调度事件)。它也更快,内存占用更少。
答案 2 :(得分:1)
如果有人需要使用真实的Actionscript-3事件调度&gt;&gt;&gt; this&lt;&lt;&lt;非常有帮助。我不知道它是否真的很慢但它符合AS-3标准。