Маркеры листовок не открывают всплывающее окно при нажатии

StackOverflow https://stackoverflow.com//questions/12659137

Вопрос

Я только начал использовать Leaflet и Маркерный кластеризатор организовать маркеры.

Проблема №1: При нажатии на некластеризованный маркер всплывающее окно не появляется.

Проблема №2: Если щелкнуть кластер несколько раз, появятся все маркеры внутри этого кластера, а при щелчке по одному из этих маркеров появится его всплывающее окно!Однако после закрытия всплывающего окна нажатием на карту нажатие на любой из этих сгруппированных маркеров не открывает никаких всплывающих окон!

Если у меня есть только 3 некластеризованных маркера, всплывающее окно работает нормально.Однако по мере добавления новых маркеров после формирования кластера нажатие на маркер внутри любого кластера не приведет к открытию всплывающего окна!

Инициализация маркерного кластера

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

Все маркеры добавлены в кластер маркеров markers

Цикл вызывает render функция для создания marker и добавьте его в массив маркерного кластера markers. (игнорируйте код 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);
    }
});

Без маркер-кластерера

Если я добавлю marker прямо к map вместо массива маркеров кластера markers, всплывающие окна работают нормально, так что я думаю, проблема как-то связана с маркером кластера.

Сделал ли я что-то не так, что привело к такому поведению всплывающих окон?Вся помощь оценена по достоинству, спасибо!

Это было полезно?

Решение

Судя по тому немногому, что я знаю о группе маркеров кластера, вам следует сделать следующее:

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

Чтобы вместо этого добавить обработчик событий на уровень кластера, сделайте следующее:

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

О, и почитай github ПРОЧТИ МЕНЯ осторожно, там все есть...

Другие советы

Убедитесь, что у вас есть правильные версии всего в вашем стеке Leaflet + Clusterer (Js и Css).Сравните с примерами в репозитории Clusterer Github.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top