Leaflet 使用模块模式在传单地图对象上运行方法

Leaflet 使用模块模式在传单地图对象上运行方法,leaflet,module,javascript,Leaflet,Module,Javascript,我试图将所有map函数封装到一个函数中,以便可以在应用程序中的其他位置执行map函数。我的模块的所有函数都在一个私有变量map上运行,这个私有变量map就是map对象。我遇到了一个条件语句的问题,该语句在将该层添加到地图之前检查是否存在贴图层对象邻域\多边形\层,以便在重新加载时不会复制该层(如果该层已存在)。map对象仅累积重复的图层对象,但map.hasLayer除外;函数从不在条件语句中检测这些对象。这就好像在将这些对象添加到地图后,可变邻域\多边形\层会松开对其对象的引用,从而允许再次执

我试图将所有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的地图中。此图层将永远不会出现在地图中,因为您刚刚创建了它:图层不是===其中的数据。如果您只想运行此函数一次,可以在初始化时执行,创建一个布尔标志,指示它以前是否运行过,或者不要多次运行