flex - ¿Cómo funciona el enlace en ActionScript?
actionscript-3 data-binding (1)
los enlaces realmente funcionan a través del envío de eventos. Puede aprender mucho del código generado de ActionScript agregando la marca de -manejar a la configuración del compilador.
Trataré de responder tus preguntas.
el compilador recogerá la etiqueta de metadatos [Bindable] y creará un getter y un setter para cada propiedad que haya marcado como vinculable. El comprador simplemente devolverá el valor de la propiedad. El colocador verificará si el nuevo valor difiere del valor original y enviará un evento PropertyChange si lo hace.
lo mismo que para las propiedades de instancia, básicamente, solo ahora se crean un eliminador y un setter estáticos. Además, se crea un mx.binding.StaticPropertyWatcher para ver los cambios en las propiedades estáticas.
cuando se vincula a un método estático, aparece la siguiente advertencia: "[Bindable] requiere un parámetro de nombre de evento cuando se aplica a una función que no es un getter o un setter". La descripción prácticamente lo dice todo. Como no tiene un evento "propertyChange" que se active específicamente para este método, debe enviar uno personalizado. Eso es [Bindable (event = "customEvent")] y luego envía ese evento desde algún lugar de tu clase.
Por lo que yo entiendo, el enlace a una var en ActionScript se lleva a cabo a través de eventos que se activan automáticamente cuando se cambia una var. Tengo algunas preguntas sobre esto:
- ¿Qué sucede si la clase no extiende explícitamente EventDispatcher? ¿Existe algún tipo de magia en el compilador que esencialmente convierte a la clase en un EventDispatcher?
- ¿Cómo funciona el enlace a los vars estáticos? ¿Se ha agregado a la clase algún tipo de función static addEventListener () implícita?
- Me he dado cuenta de que puedes poner [Bindable] en vars estáticos pero no en funciones estáticas, ¿por qué es esto?
Editar:
Gracias a Christophe Herreman por su respuesta esclarecedora. Sin embargo, tengo algunos follow-ons de mis preguntas arriba. Me pregunto si alguien podría llenar los vacíos (intenté numerar estas preguntas 4, 5, 6 pero aparecen 1, 2, 3 por alguna razón).
Agregué la opción -keep al compilador y miré el código de enlace generado. ¿Alguien podría explicar cómo se aplica este código? El compilador parece generar una clase llamada BindableProperty para cada clase, que contiene getter y setter. ¿Cómo se dobla esto en la clase que escribí? La función se parece a las clases parciales en C #: ¿es esta funcionalidad del compilador exclusivamente detrás de escena, o es algo que podría usar yo mismo?
La clase BindableProperty aún no implementa explícitamente EventDispatcher, ¿cómo implementa la clase generada el envío de eventos?
En la pregunta 3, pregunté sobre el enlace a las funciones estáticas, pero en realidad me refería a las funciones estáticas getter y setter. Esto no parece estar permitido.