impl js mipluginControl.js - Desarrollos-IDEE/API-IDEE GitHub Wiki
Una vez definida la fachada del plugin, hay que desarrollar las distintas implementaciones que se deseen: ol, leaflet, etc. Recordemos que la fachada recogía la lógica no dependiente de la librería de mapas, que se usaba exclusivamente en la implementación.
mipluginControl.js
> Constructor
Provee la implementación como dependencia al igual que ocurría para la fachada, instancia la implementación del control, y llama al constructor padre de M.impl.Control:
/**
* @module M/impl/control/MipluginControl
*/
export class MipluginControl extends M.impl.Control {
constructor() {
super();
}
> addTo
Define la forma de añadir el control con la implementación que estamos usando. Este método recibe el mapa y el html del control que habíamos definido previamente en el createView de la fachada del control.
Por ejemplo, si la implementación usada es OpenLayers, inciamos el control con OL y lo añadimos al mapa con su método específico:
addTo(map, html) {
this.facadeMap_ = map;
ol.control.Control.call(this, {
'element': element,
'target': null
});
map.getMapImpl().addControl(this);
};
La clase padre M.impl.Control del que hereda nuestro control M.impl.control.MiControl ya realiza estos últimos pasos, por lo que podemos ahorrarnos código llamando al método addTo del padre mediante:
addTo(map, html) {
super.addTo(map, html);
};
> activate, deactivate
Si queremos realizar acciones concretas sobre el mapa cuando el control se active o desactive tendremos que implementar los métodos activate y deactivate del control respectivamente:
// Ocurre al activar el botón
activate() {
M.dialog.info('Hello World!');
};
// Ocurre al desactivar el botón
deactivate() {
M.dialog.info('Bye World!');
};
> destroy
Este método será ejecutado cuando el control del plugin sea eliminado del mapa. Es decir, será en este método donde tendremos que deshacer los cambios que se realizaron en la parte de la implementación del control del plugin. Por ejemplo, los eventos establecidos al mapa.
destroy() {
this.layer_ = null;
this.modifiedFeatures = [];
this.facadeMap_.getMapImpl().removeControl(this);
}