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 !

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top