Los marcadores de folletos no abren la ventana emergente al hacer clic
-
11-12-2019 - |
Pregunta
Recién comencé a usar Leaflet y Agrupador de marcadores para organizar los marcadores.
Problema #1: Cuando se hace clic en un marcador no agrupado, no aparece ninguna ventana emergente.
Problema #2: Cuando se hace clic en un grupo varias veces, aparecen todos los marcadores dentro de ese grupo, y cuando se hace clic en uno de estos marcadores, aparece su ventana emergente.Sin embargo, después de cerrar la ventana emergente haciendo clic en el mapa, al hacer clic en cualquiera de estos marcadores agrupados no se abre ninguna ventana emergente.
Si sólo tengo 3 marcadores no agrupados, la ventana emergente funciona bien.Sin embargo, a medida que se agregan más marcadores, una vez que se forma un grupo, hacer clic en el marcador dentro de cualquier grupo no hará que se abra la ventana emergente.
Inicializando el clusterer de marcadores
markers = new L.MarkerClusterGroup();
map.addLayer(markers);
Todos los marcadores agregados al grupo de marcadores markers
Un bucle llama a la render
función para crear el marker
y agréguelo a la matriz del marcador clusterer markers
. (ignore el código backbone.js)
ListingMarkerView = Backbone.View.extend({
template: _.template( $('#tpl_ListingMarkerView').html() ),
render: function() {
// Create marker
var content = this.template( this.model.toJSON() );
var marker = new L.marker(
[this.model.get('lat'), this.model.get('lng')],
{content: content});
marker.bindPopup(content);
// Add to markerclusterer
markers.addLayer(marker);
}
});
Sin marcador clusterer
Si agrego el marker
directamente a map
en lugar de la matriz marcadorclusterer markers
, las ventanas emergentes funcionan bien, así que supongo que el problema tiene algo que ver con el marcador clusterer.
¿Hice algo mal que provocó tal comportamiento en las ventanas emergentes?Se agradece toda la ayuda, ¡gracias!
Solución
Por lo poco que sé del grupo de marcadores de clúster, deberías hacer esto:
var markerGroup = new L.MarkerClusterGroup();
markerGroup.on('click', function(ev) {
// Current marker is ev.layer
// Do stuff
});
Para agregar un controlador de eventos a la capa del clúster, haga esto:
markerGroup.on('clusterclick', function(ev) {
// Current cluster is ev.layer
// Child markers for this cluster are a.layer.getAllChildMarkers()
// Do stuff
});
Ah, y lee el github. LÉAME Cuidado, está todo ahí...
Otros consejos
Asegúrese de tener las versiones correctas de todo en su pila Leaflet + Clusterer (Js y Css).Compare con los ejemplos del repositorio de Clusterer Github.