Skip to content
Jorge Bellon edited this page May 24, 2016 · 6 revisions

##Dali.API# Este objeto expone tres métodos que se encargan de lanzar y gestionar los eventos usados en la comunicación entre los plugins y el núcleo. Estos son:

  • addMenuButton: es llamado al inicializar los plugins, lanza un evento de tipo "addMenuButton" que es escuchado en el componente PlugginRibbon y añade un botón al mismo con la configuración proporcionada como parámetro en formato JSON (texto, icono, etc.) para que pueda ser usado posteriormente.

  • openConfig: es llamado cuando se quiere tener acceso al modal de configuración de los plugins más complejos. Funciona de manera asíncrona, ya que devuelve la referencia al div sobre el que se desea pintar. Recibe dos parámetros, el nombre del plugin a cuyo modal se desea acceder y un booleano indicando si es la primera vez que se accede (necesario para el método render del plugin). Lanza un evento de tipo "openConfig" que es escuchado en el componente PluginConfigModal y que provoca que este se despligue. Una vez hecho, responde al evento proporcionando la referencia al div antes mencionada. Normalmente, este método es llamado desde el componente PluginToolbar al pulsar en el botón de "abrir configuración" o al crear un plugin. Para implementar esto, se han usado promises.

  • renderPlugin: es el método más utilizado y se usa para renderizar los plugins. Lanza un evento de tipo "render" que se escucha en DaliApp y en función del parámetro "isUpdating", lanza una acción u otra para crear o actualizarun DaliBox en el estado de la aplicación. Además, recibe como parámetros un JSON indicando el HTML que debe renderizar, la barra de herramientas del plugin, la configuración, su estado, un conjunto de identificadores (el que hace referencia al propio DaliBox, a su padre y a su contenedor) y una serie de parámetros iniciales que se desee que tenga el DaliBox (como posición o tamaño).

##Dali.API.Private# Este objeto expone un diccionario con todos los tipos de eventos usados además de cinco métodos, que son los encargados de lanzar y escuchar los eventos de una manera genérica.

Un evento tiene siempre una propiedad llamada emit que es una cadena de texto que lo identifica de manera unívoca con respecto al resto. Además, si se quiere poder contestar a ese evento, deberá tener una propiedad llamada answer que también es una cadena de texto que sirva para identificarlo de manera unívoca (es recomendable usar la misma que para emit añadiendo el sufijo "_back").

Los métodos expuestos en este objeto son:

  • emit: recibe dos parámetros, el nombre del evento que quiere lanzarse y un objeto que será añadido al mismo como payload. Con estos valores, crea el evento como un CustomEvent y lo lanza.

  • listenEmission: recibe dos parámetros, el nombre del evento y una función que se ejecutará cuando este sea escuchado. Su función es añadir al objeto window el escuchador del evento.

  • answer: hace la misma función que emit pero usa la propiedad answer del evento indicado en vez de emit para crear el evento.

  • listenAnswer: hace lo mismo que listenEmission con la particularidad de que la función recibida como parámetro para ser ejecutada al ser escuchado el evento no se ejecutará aquí, sino que se pasará como parámetro a cleanUpAndResolve y será esta la ejecutada. Además, se guarda la referencia a cleanUpAndResolve después de haberle pasado sus parámetros correspondientes para poder eliminar el escuchador del evento, como se verá a continuación.

  • cleanUpAndResolve: se encarga de quitar del objeto window el escuchador del evento de respuesta, ya que si no, podría ser añadido varias veces y esto podría llevar a fallos al lanzar la función asignada al evento varias veces. Para poder eliminarse, se ha de guardar la referencia exacta a la función asignada al evento, y esto hemos visto que se ha hecho ya en listenAnswer. Recibe tres parámetros, que son el nombre del evento inicialmente lanzado en answer, la función que se quiere que se ejecute al recibirse este evento y la propia instancia del CustomEvent lanzado en answer con el payload proporcionado en ese método.

##Mejoras futuras# Hacer inaccesible la parte privada de la API