3

我刚开始使用 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 array markers,弹出窗口工作正常,所以我猜这个问题与 markerclusterer 有关。

我是否做错了什么导致弹出窗口的这种行为?感谢所有帮助,谢谢!

4

2 回答 2

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,都在里面……

于 2012-11-13T17:06:09.583 回答
0

确保 Leaflet + Clusterer 堆栈(Js 和 Css)中所有内容的正确版本。与 Clusterer Github 存储库中的示例进行比较。

于 2013-01-24T15:37:09.100 回答