gpt4 book ai didi

javascript - 使用模块模式在传单 map 对象上运行方法

转载 作者:行者123 更新时间:2023-11-28 08:10:20 25 4
gpt4 key购买 nike

我正在尝试封装我所有的 将函数映射到 ,这样我就可以在应用程序的其他地方执行我的 map 函数。我的模块的所有函数都在私有(private)变量“map”上运行,即 map 对象。我遇到了条件语句的问题,该条件语句在将此图层添加到 map 之前检查 map 图层对象“neighborhood_polygon_layer”是否存在,以便在重新加载时不会复制该图层(如果该图层已存在)。 map 对象只是累积重复的图层对象,但map.hasLayer();函数从不检测条件语句中的这些对象。一旦这些对象被添加到 map 中,允许函数再次执行,变量“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);
}
};
} ());

最佳答案

It's as if the variable "neighborhood_polygon_layer" looses it's reference to it's object once those objects are added to the map allowing the function to execute again.

否:

var neighborhood_polygon_layer = L.geoJson(neighborhoodPolygons);

这将创建一个名为 neighborhood_polygon_layer新图层,并通过 hasLayer 查看它是否位于 map 中。该图层永远不会出现在 map 中,因为您刚刚创建了它:图层并不===其中的数据。如果您只想运行此函数一次,可以在初始化时执行此操作,创建一个 bool 标志来确定它之前是否运行过,或者不要运行多次。

关于javascript - 使用模块模式在传单 map 对象上运行方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24289777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com