我正在尝试将所有leaflet地图函数封装到module中,以便我可以在应用程序的其他位置执行我的地图函数。我的所有模块函数都在私有变量" map"上运行,这是leaflet地图对象。我遇到了条件语句的问题,该条件语句检查是否存在地图图层对象" neighborhood_polygon_layer"在将此图层添加到地图之前,以便在重新加载时,如果图层已经存在,则不会复制该图层。 map对象只是累积了重复的图层对象,但map.hasLayer();函数永远不会在条件语句中检测到这些对象。它好像变量" neighborhood_polygon_layer"一旦将这些对象添加到地图中,允许该功能再次执行,就会失去它对它的对象的引用。
var sbk = sbk || {};
sbk.map = (function () {
var map = L.mapbox.map('map', '[redacted map id]');
return {
render_neighborhood_polygons: function(polygonNeighborhoods, storyNeighborhoods, neighborhoods){
var neighborhoodPolygons = [];
var neighborhoodsIntersection = _.intersection(polygonNeighborhoods, storyNeighborhoods);
neighborhoodsIntersection.forEach(function (neighborhood) {
neighborhoodPolygons.push(neighborhoods.get(neighborhood).attributes);
});
var neighborhood_polygon_layer = L.geoJson(neighborhoodPolygons);
if(!map.hasLayer(neighborhood_polygon_layer)) {
neighborhood_polygon_layer.addTo(map);
}
};
} ());
答案 0 :(得分:0)
它好像变量" neighborhood_polygon_layer"一旦将这些对象添加到地图中,允许该功能再次执行,就会失去它对它的对象的引用。
没有
var neighborhood_polygon_layer = L.geoJson(neighborhoodPolygons);
这会创建一个名为neighborhood_polygon_layer
的新图层,并查看它是否在hasLayer
的地图中。这个图层永远不会出现在地图中,因为你刚创建它:图层不是===其中的数据。如果你只想运行一次这个函数,要么在初始化时进行,要么为之前运行它创建一个布尔标志,要么不要多次运行它。