2009-03-23 16 views
13

que se desarrollan con FlashDevelop3 R2 y el SDK de Flex 3.3 y hay muchas ocasiones en las que debe utilizar la etiqueta embed metadatos como tal:AS3 [Evento (nombre = "", tipo = "")], ¿cuál es el significado?

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

entiendo el por encima de todo muy bien, y estoy agradecido de que existe porque no me gusta abrir el flash IDE con demasiada frecuencia.

Cuando voy a través de otras clases últimamente autores, he encontrado una etiqueta de metadatos interesante que no entiendo:

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

todavía tengo que ver una situación en la que requiero esto, y además realmente simplemente no entiendo para qué es.

Gracias de antemano por su ayuda.

Brian Hodge
blog.hodgedev.comhodgedev.com

Respuesta

12

lo usamos para eventos personalizados unión a nuestros componentes MXML personalizado. Esta etiqueta le permite hacer referencia a ella desde MXML. Ver documentation:

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

class ModalText extends TextArea { ... }

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

El compilador se quejará, sin embargo, si se intenta hacer referencia a un evento en una etiqueta MXML que no fue declarado con una metaetiqueta de evento.

+0

Interesante, he estado encontrando esto en proyectos AS3 que no incluyen MXML, ¿crees que esto es porque esta clase puede importarse y utilizarse en un proyecto que utiliza MXML? –

+0

Sí, los componentes personalizados suelen estar codificados en AS3 puro para evitar problemas de rendimiento. – dirkgently

20

Estas declaraciones [Event(name, type)] describen los eventos que una instancia de clase probablemente distribuirá.

en realidad son útiles para código de finalización - por ejemplo cuando escribe: mySprite.addEventListener(, el editor de código (Flex Builder o FlashDevelop) mostrará una lista significativa de los eventos que este objeto puede despachar.

Para que pueda agregar estas declaraciones en su código y beneficiarse de una terminación de código más rica.

También tenga en cuenta que esto funciona con clases de eventos personalizados (consulte la nueva plantilla de clase de eventos de 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

¡Exactamente la respuesta que estaba buscando! – Veehmot

Cuestiones relacionadas