Manejar eventos
En el portal existe un bus de eventos que sirve para la comunicación entre todos los módulos. Se recomienda leer una introducción a este patrón de diseño si no se está familiarizado con él.
En este capítulo veremos cómo interactuar con la plataforma a través de estos eventos. Para ello vamos a crear un plugin que oculte todas las capas del mapa a la vez:
mkdir -p geoladris/portal/plugins/eventos/src
En este plugin tendremos que utilizar un patrón muy habitual que consiste en hacer dos cosas:
- Escuchar eventos y recoger información de ellos.
- Realizar una acción con la información obtenida.
Escuchando eventos
Para ocultar las capas se utilizará el evento layer-visibility
, al que se pasa el identificador de la capa y el valor de visibilidad. El valor de visibilidad es siempre falso, pero además se necesitará la lista de identificadores de todas las capas.
Para obtenerlos, es necesario añadir message-bus
como dependencia, escuchar el evento add-layer
y guardar el identificador de cada capa en un array:
define([ 'message-bus' ], function(bus) { let layerIds = []; bus.listen('add-layer', function(e, layerInfo) { layerIds.push(layerInfo.id); }); });
Enviando eventos
Una vez recopilados todos los identificadores, solo queda lanzar el mensaje para cada una de las capas.
Esto se hará en respuesta a la pulsación de un botón, utilizando el plugin botonera
que hemos creado antes:
define([ 'message-bus', 'botonera/crear' ], function(bus, crearBoton) { let layerIds = []; bus.listen('add-layer', function(e, layerInfo) { layerIds.push(layerInfo.id); }); crearBoton('Todas invisibles', function() { layerIds.forEach(function(id) { bus.send('layer-visibility', id, false); }); }); });