Leaflet 使用模块模式在传单地图对象上运行方法
我试图将所有map函数封装到一个函数中,以便可以在应用程序中的其他位置执行map函数。我的模块的所有函数都在一个私有变量map上运行,这个私有变量map就是map对象。我遇到了一个条件语句的问题,该语句在将该层添加到地图之前检查是否存在贴图层对象邻域\多边形\层,以便在重新加载时不会复制该层(如果该层已存在)。map对象仅累积重复的图层对象,但map.hasLayer除外;函数从不在条件语句中检测这些对象。这就好像在将这些对象添加到地图后,可变邻域\多边形\层会松开对其对象的引用,从而允许再次执行该函数Leaflet 使用模块模式在传单地图对象上运行方法,leaflet,module,javascript,Leaflet,Module,Javascript,我试图将所有map函数封装到一个函数中,以便可以在应用程序中的其他位置执行map函数。我的模块的所有函数都在一个私有变量map上运行,这个私有变量map就是map对象。我遇到了一个条件语句的问题,该语句在将该层添加到地图之前检查是否存在贴图层对象邻域\多边形\层,以便在重新加载时不会复制该层(如果该层已存在)。map对象仅累积重复的图层对象,但map.hasLayer除外;函数从不在条件语句中检测这些对象。这就好像在将这些对象添加到地图后,可变邻域\多边形\层会松开对其对象的引用,从而允许再次执
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);
}
};
} ());
这就好像在将这些对象添加到地图后,可变邻域\多边形\层会松开对其对象的引用,从而允许再次执行该函数
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);
}
};
} ());
否:
这将创建一个名为“邻域\多边形\层”的新层,并查看它是否在带有hasLayer的地图中。此图层将永远不会出现在地图中,因为您刚刚创建了它:图层不是===其中的数据。如果您只想运行此函数一次,可以在初始化时执行,创建一个布尔标志,指示它以前是否运行过,或者不要多次运行