-
Notifications
You must be signed in to change notification settings - Fork 2
facade js miplugin.js
El espacio de nombre será el nombre del plugin añadido al espacio de nombre P.plugin. Si va a contener uno o varios controles, deberá incluir las directivas require de closure correspondientes:
goog.provide('P.plugin.miPlugin');
goog.require('P.control.miPluginControl');
> Constructor
En este constructor instanciaremos el plugin que se esté usando y llamamos al super (al constructor de M.Plugin del que heredamos) mediante la directiva base de closure. Una vez definido el constructor tenemos que indicar que nuestro plugin hereda de M.Plugin a través de la directiva inherits de closure:
M.plugin.miPlugin = (function() {
goog.base(this);
});
goog.inherits(M.plugin.miPlugin, M.Plugin);
También en este método podemos declarar las variables que deba tener el plugin, que dependerán de las necesidades del mismo. Por lo general, hay tres variables que tener en cuenta:
- El nombre del plugin
- El objeto mapa.
- El panel del plugin, en caso de que vaya a tener y gestionarlo.
- El o los controles que forman parte del plugin.
Así lo anterior quedaría:
M.plugin.miPlugin = (function() {
this.name = 'miPlugin';
this.map_ = null;
this.controls_ = new Array();
this.panel_ = null;
goog.base(this);
});
goog.inherits(M.plugin.miPlugin, M.Plugin);
> addTo
Será llamado una vez que se añada al mapa. Este es el método principal de un plugin ya que recibe como parámetro la instancia del mapa sobre el cual funcionará. Las acciones que podemos realizar en este método incluyen:
- Asignación del objeto mapa.
- Inicialización de posibles controles internos.
- Inicialización del posible panel contendor.
Por ejemplo, si nuestro plugin contendrá un control, en este método será donde lo creemos y lo añadamos al mapa:
M.plugin.miPlugin.prototype.addTo = function(map) {
// Inicializamos controles;
this.controls_.push(new M.control.miPluginControl());
// Guardamos referencia al mapa contenedor
this.map_ = map;
this.map_.addControls(this.controls_);
};
Si el plugin dispone de un Panel, al añadir el control al mismo, este lo añadrirá a su vez al mapa, por lo que no tendremos que hacerlo explícitamente:
this.panel_ = new M.ui.Panel('mipanel', {
"collapsible": false,
"className": "m-map-info",
"position": M.ui.position.TR
});
}
// esto asigna a su vez el panel al control
this.panel_.addControls(this.controls_);
this.map_.addPanels(this.panel_);
Es recomendable que después de añadir el plugin al mapa, se lance el evento M.evt.ADDED_TO_MAP. Cada plugin, en función de su lógica interna, deberá hacer unas u otras comprobaciones previas (¿están inicializados los controles internos? etc.).
> destroy
Este método será ejecutado cuando el plugin sea removido del mapa. Es decir, será en este método donde tendremos que deshacer los cambios que realizó dicho plugin. Por ejemplo, para el caso anterior, tendremos que eliminar el control personalizado del mapa:
M.plugin.miPlugin.prototype.destroy = function(map) {
this.map_.removeControls([miControl]);
this.map_ = null;
};
> getControls
Dar acceso a los posibles controles internos desde fuera del plugin es opcional, el desarrollador deberá evaluar si es necesario o si facilita su uso.
M.plugin.miPlugin.prototype.getControls = function() {
return this.controls_;
};