2009-03-23 7 views
13

rozwijam z FlashDevelop3 R2 i Flex 3.3 SDK i istnieje wiele sytuacji, w których muszę użyć tagu metadanych osadzenia jako takie:AS3 [Event (name = "", type = "")], jakie jest znaczenie?

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

Rozumiem, że przede wszystkim dobrze, i jestem wdzięczny, że istnieje ponieważ nie lubię zbyt często otwierać IDE Flasha.

Kiedy idę przez innych autorów klas ostatnio znalazłem ciekawą tag metadanych że nie rozumiem:

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

mam jeszcze zobaczyć sytuację, gdzie wymagają tego, a ponadto Naprawdę po prostu nie rozumiem do czego to służy.

Z góry dziękuję za pomoc.

Brian Hodge
blog.hodgedev.comhodgedev.com

Odpowiedz

12

Używamy go do wiązania zdarzeń niestandardowych do naszych niestandardowych składników MXML. Ten tag umożliwia odniesienie go do MXML. Zobacz documentation:

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

class ModalText extends TextArea { ... }

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

Kompilator narzeka jednak, jeśli starają się odnieść do zdarzenia na tagu mxml że nie został zadeklarowany przy metatagu zdarzenia.

+0

Ciekawe, że zostały znalezienie tego w AS3 projektów, które obejmują nie MXML, myślisz, że to dlatego, że klasa ta może być importowany do i używane w projekcie, który wykorzystuje MXML? –

+0

Tak, niestandardowe komponenty są zwykle kodowane w czystym AS3, aby uniknąć problemów z wydajnością. – dirkgently

20

Te deklaracje [Event(name, type)] opisują, które zdarzenia może wysłać instancja klasy.

rzeczywistości są one przydatne dla uzupełniania kodu - na przykład po wpisaniu: mySprite.addEventListener(, edytor kodu (Flex Builder lub FlashDevelop) wyświetli listę znaczących wydarzeń, że obiekt ten może wywołać.

Możesz dodać te deklaracje w swoim kodzie i skorzystać z bogatszego uzupełniania kodu.

Należy również pamiętać, że działa to z niestandardowymi klasami zdarzeń (zobacz nowy szablon klasy Event 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 
      } 
    } 
} 
+0

Dokładnie odpowiedź, której szukałem! – Veehmot