使用模块模式在传单映射对象上运行方法

时间:2014-06-18 15:41:46

标签: javascript leaflet

我正在尝试将所有地图函数封装到中,以便我可以在应用程序的其他位置执行我的地图函数。我的所有模块函数都在私有变量" map"上运行,这是地图对象。我遇到了条件语句的问题,该条件语句检查是否存在地图图层对象" 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);
            }
    };
} ());

1 个答案:

答案 0 :(得分:0)

  

它好像变量" neighborhood_polygon_layer"一旦将这些对象添加到地图中,允许该功能再次执行,就会失去它对它的对象的引用。

没有

var neighborhood_polygon_layer = L.geoJson(neighborhoodPolygons);

这会创建一个名为neighborhood_polygon_layer新图层,并查看它是否在hasLayer的地图中。这个图层永远不会出现在地图中,因为你刚创建它:图层不是===其中的数据。如果你只想运行一次这个函数,要么在初始化时进行,要么为之前运行它创建一个布尔标志,要么不要多次运行它。