![](/img/trans.png)
[英]How do I code MXML to attach a listener to a custom ActionScript class
[英]How do I addEventListener to custom actionscript class?
我有一個可以擴展NavigatorContent的actionscript類MyClass。 我將該類實例化為Accordion組件的自定義MXML NavigatorContnent組件。 MyClass有一個我試圖附加事件監聽器的Button組件。 我想讓事件冒泡,以便我可以在Accordion組件中擁有處理程序。
我的課
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>
您已將元數據添加到類定義中
[Event(name="selectEvent", type="flash.events.Event")]
所以你需要在mxml中做的就是
<comp:MyClass selectEvent="event_handler(event)"
..... />
在AS3中,您可以添加事件偵聽器
myClass.addEventListener("selectEvent", event_handler);
PS您的課程必須擴展EventDispatcher
如果有人需要使用真正的Actionscript-3事件調度>>> 這對 <<<非常有幫助。 我不知道它是否真的很慢但它符合AS-3標准。
您的類要么需要擴展DisplayObject
類,要么直接從EventDispatcher
繼承,以便能夠使用事件。 忘記實現IEventDispatcher
因為某處有一段特殊的黑色代碼,這意味着EventDispatcher
是唯一可以設置Event
類的target
屬性的類(我之前嘗試過)。
考慮使用其他替代品。 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" );
}
}
您還可以查看Signals項目: https : //github.com/robertpenner/as3-signals/wiki
信號遠遠優於普通Flash事件,並且對可以使用它們的對象類型沒有限制(即非DisplayObject對象仍然可以添加事件偵聽器和調度事件)。 它也更快,內存占用更少。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.