我在带有geoJson的Mapbox中使用此功能,以使用simplestyle中的样式标记

var groupThree = new L.LayerGroup();
L.geoJson(layerThree, {
    pointToLayer: L.mapbox.marker.style,
    style: function (feature) {
        return feature.properties;
    }
}, {
    onEachFeature: onEachFeature
}).addTo(groupThree);


但是,当我运行它时,单击标记不能弹出一个窗口。这是popupContent的功能:

var popupContent = "";
function onEachFeature(feature, layer) {
        if (feature.properties && feature.properties.popupContent) {
            popupContent = feature.properties.popupContent;
        }
        layer.bindPopup(popupContent);
    }


Here's my fiddle显示没有simplestyle的标记具有可正常工作的弹出窗口,而具有simplestyle的标记具有无法正常工作的弹出窗口。

pointToLayer和onEachFeature是否以某种方式干扰?我该如何运作?

最佳答案

一切正常,除了一个语法错误:

var groupTwo = new L.LayerGroup();
L.geoJson(layerTwo, {
  pointToLayer: L.mapbox.marker.style,
  style: function(feature) { return feature.properties; }
}, {onEachFeature: onEachFeature}).addTo(groupTwo);
 ^
 ^


就在这里,您将onEachFeature作为单独的L.geoJson参数传递,但是L.geoJson中没有第三个参数。因此,基本上,您创建了两个对象,而不是一个。

固定:

var groupTwo = new L.LayerGroup();
L.geoJson(layerTwo, {
  pointToLayer: L.mapbox.marker.style,
  style: function(feature) { return feature.properties; },
  onEachFeature: onEachFeature
}).addTo(groupTwo);


groupThree中的情况相同。

Working JSFiddle

09-25 21:52