AS3 [Событие (name= ", type =" ")], каково значение?

Я разрабатываю FlashDevelop3 R2 и SDK Flex 3.3, и есть много случаев, когда я должен использовать тег метаданных embed как таковой:

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

Я понимаю все это хорошо и хорошо, и я благодарен, что он существует, потому что я не очень часто открываю Flash IDE.

Когда я в последнее время просматриваю классы других авторов, я нашел интересный тег метаданных, который я не понимаю:

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

Мне еще предстоит увидеть ситуацию, в которой я требую этого, и, кроме того, я действительно просто не понимаю, для чего это нужно.

Заранее благодарим за помощь.

Брайан Ходж
blog.hodgedev.com hodgedev.com

Ответы

Ответ 1

Мы используем его для привязки настраиваемых событий к нашим пользовательским компонентам MXML. Этот тег позволяет ссылаться на него с MXML. См. документация:

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

class ModalText extends TextArea { ... }

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

Компилятор будет жаловаться, однако, если вы попытаетесь обратиться к событию в теге mxml, который не был объявлен с помощью метатега событий.

Ответ 2

Эти объявления [Event(name, type)] описывают, какие события экземпляр класса может отправлять.

Они действительно полезны для завершения кода - например, при вводе: mySprite.addEventListener(, в редакторе кода (Flex Builder или FlashDevelop) будет отображаться значимый список событий, которые этот объект может отправить.

Таким образом, вы можете добавить эти объявления в свой код и извлечь выгоду из более богатого завершения кода.

Также обратите внимание, что это работает с настраиваемыми классами событий (см. новый шаблон класса событий FlashDevelop).

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
          }
     }
}