Les marqueurs de dépliants n'ouvrent pas la fenêtre contextuelle au clic
-
11-12-2019 - |
Question
Je viens de commencer à utiliser Leaflet et Clustereur de marqueurs pour organiser les marqueurs.
Problème n°1 : Lorsqu'un marqueur non clusterisé est cliqué, aucune fenêtre contextuelle n'apparaît.
Problème n°2 : Lorsqu'un cluster est cliqué plusieurs fois, tous les marqueurs de ce cluster apparaissent, et lorsque l'un de ces marqueurs est cliqué, sa popup apparaît !Cependant, après avoir fermé la fenêtre contextuelle en cliquant sur la carte, cliquer sur l'un de ces marqueurs groupés n'ouvre aucune fenêtre contextuelle !
Si je n'ai que 3 marqueurs non clusterisés, la fenêtre contextuelle fonctionne correctement.Cependant, à mesure que d'autres marqueurs sont ajoutés, une fois qu'un cluster se forme, cliquer sur le marqueur dans n'importe quel cluster ne provoquera pas l'ouverture de la fenêtre contextuelle !
Initialisation de Markerclusterer
markers = new L.MarkerClusterGroup();
map.addLayer(markers);
Tous les marqueurs ajoutés au Markercluster markers
Une boucle fait appel au render
fonction pour créer le marker
et ajoutez-le au tableau du Markerclusterer markers
. (ignorez le code 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);
}
});
Sans marqueurclusterer
Si j'ajoute le marker
directement à map
au lieu du tableau Markerclusterer markers
, les popups fonctionnent bien, donc je suppose que le problème a quelque chose à voir avec Markerclusterer.
Ai-je fait quelque chose de mal qui a entraîné un tel comportement des popups ?Toute aide appréciée, merci !
La solution
D'après le peu que je connais du groupe de marqueurs de cluster, vous devriez faire ceci :
var markerGroup = new L.MarkerClusterGroup();
markerGroup.on('click', function(ev) {
// Current marker is ev.layer
// Do stuff
});
Pour ajouter un gestionnaire d'événements à la couche de cluster, procédez comme suit :
markerGroup.on('clusterclick', function(ev) {
// Current cluster is ev.layer
// Child markers for this cluster are a.layer.getAllChildMarkers()
// Do stuff
});
Oh, et lis le github LISEZMOI attention, tout est là-dedans...
Autres conseils
Assurez-vous d'avoir les bonnes versions de tout ce qui se trouve dans votre stack Leaflet + Clusterer (Js et Css).Comparez avec les exemples du dépôt Clusterer Github.