Domanda

Ho appena iniziato a utilizzare il volantino e Marker Clanter per organizzare i marcatori.

Problema # 1: Quando si fa clic su un indicatore non cluster, non viene visualizzato alcun popup.

Problema # 2: Quando viene fatto clic su un cluster più volte, vengono visualizzati tutti i marker all'interno di quel cluster, e quando viene fatto clic su uno di questo marker, viene visualizzato il suo popup! Tuttavia, dopo aver chiuso il popup cliccando sulla mappa, facendo clic su uno di questi indicatori cluster non aprire i popup!

Se ho solo 3 indicatori non clusssenti, il popup funziona bene. Tuttavia, poiché vengono aggiunti più marker, una volta che una forma di cluster, facendo clic sul marker all'interno di qualsiasi cluster non farà aprire il popup!

Inizializzazione MarkerCluster

markers = new L.MarkerClusterGroup();
map.addLayer(markers);
.

Tutti i marker aggiunti a markerCluster markers

Un loop chiama la funzione render per creare marker e aggiungerla all'array markers array di marcatore. (ignora il codice 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);
    }
});
.

senza markerclusteratore

Se aggiungo il marker direttamente a map invece della matrice di markerclusteratore markers, i popup funzionano bene, quindi immagino che il problema abbia qualcosa a che fare con Markercluster.

Ho fatto qualcosa di sbagliato che ha comportato un comportamento del genere dei popup? Tutto Aiuto Aiuto apprezzato, grazie!

È stato utile?

Soluzione

Da quanto poco conosco del gruppo di marcatori del cluster, dovresti farlo:

var markerGroup = new L.MarkerClusterGroup();
markerGroup.on('click', function(ev) {
    // Current marker is ev.layer
    // Do stuff
});
.

Per aggiungere un gestore di eventi al livello del cluster invece, fallo:

markerGroup.on('clusterclick', function(ev) {
    // Current cluster is ev.layer
    // Child markers for this cluster are a.layer.getAllChildMarkers()
    // Do stuff
});
.

Oh, e leggi il github readme con attenzione, è tutto lì dentro ...

.

Altri suggerimenti

Assicurati di avere le versioni giuste di tutto nel volantino + pila del cluster (JS e CSS).Confronta contro gli esempi nel repo del cluster GitHub.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top