单张标记不会在单击时打开弹出窗口

时间:2012-09-30 06:17:15

标签: markerclusterer openstreetmap leaflet mapbox

我刚刚开始使用Leaflet和Marker Clusterer来组织标记。

问题#1:点击非聚集标记时,不会显示任何弹出窗口。

问题#2:多次点击群集时,会显示该群集中的所有标记,当点击其中一个标记时,会显示其弹出窗口!但是,在通过单击地图关闭弹出窗口后,单击任何这些聚簇标记都不会打开任何弹出窗口!

如果我只有3个非聚集标记,弹出窗口工作正常。但是,随着更多标记的添加,一旦群集形成,点击任何群集中的标记都不会导致弹出窗口打开!

初始化markerclusterer

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

所有标记都已添加到markercluster markers

循环调用render函数创建marker并将其添加到markerclusterer的数组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);
    }
});

没有markerclusterer

如果我将marker直接添加到map而不是markerclusterer数组markers,弹出窗口工作正常,所以我猜这个问题与markerclusterer有关。

我做错了导致弹出窗口的这种行为吗?所有帮助表示感谢,谢谢!

2 个答案:

答案 0 :(得分:2)

从我对集群标记组的了解很少,你应该这样做:

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 README,它就在那里......

答案 1 :(得分:0)

确保您的Leaflet + Clusterer堆栈(Js和Css)中的所有内容都正确。与Clusterer Github repo中的示例进行比较。