AS3 [Event(name=“”, type=“”)], what is the significance?

匿名 (未验证) 提交于 2019-12-03 02:51:02

问题:

I develop with FlashDevelop3 R2 and the Flex 3.3 SDK and there are many occasions where I must use the embed metadata tag as such:

  [Embed(source="path/to/file")]   private var Asset:Class; 

I understand the above all well and good, and I am thankful it exists because I do not like to open the flash IDE too often.

When I am going through other authors classes lately, I have found an interesting metadata tag that I do not understand:

[Event(name="", type="")] 

I have yet to see a situation where I require this, and furthermore I really just do not understand what it is for.

Thank in advance for your help.

Brian Hodge
blog.hodgedev.com hodgedev.com

回答1:

We use it for binding custom events to our custom MXML components. This tag allows you to reference it from MXML. See documentation:

[Event(name="enableChanged", type="flash.events.Event")]

class ModalText extends TextArea { ... }

<MyComp:ModalText enableChanged="handleEnableChangeEvent(event);"/>

The compiler will complain, however, if you try to refer to an event on an mxml tag that was not declared with an event metatag.



回答2:

These [Event(name, type)] declarations describe which events a class instance is likely to dispatch.

They are actually useful for code completion - for instance when you type: mySprite.addEventListener(, your code editor (Flex Builder or FlashDevelop) will display a meaningful list of events that this object can dispatch.

So you can add these declarations in your code and benefit from a richer code completion.

Also note that this works with custom Event classes (see FlashDevelop's new Event class template).

package mycomp {     import flash.events.Event;      public class MyEvent extends Event {          public const SOME_EVENT:String = "someEvent";          // required Event type declarations     } }  package mycomp {      [Event(name="someEvent", type="mycomp.MyEvent")]      public class MyComp extends Sprite {      } }  package myproject {      import mycomp.MyComp;       public class MyProject {           function MyProject() {                 var mc:MyComp = new MyComp();                 mc.addEventLister( //completes: SOME_EVENT + Sprite events           }      } } 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!