Маркеры листовок не открывают всплывающее окно при нажатии
-
11-12-2019 - |
Вопрос
Я только начал использовать 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.