这里需要 eval 函数吗?
Is eval function necessary here?
我想问你,在这段代码中省略 eval() func 是否合理。特别是
<script>
...
...
function addGeoJson (geoJsonPath, iconPath = "leaflet-2/images/marker-icon.png", iconSize = [30,50], popUpContent, sideBarContent)
{$.getJSON(geoJsonPath,function(data){
var geoIcon = L.icon({
iconUrl: iconPath,
iconSize: iconSize
});
L.geoJson(data,{
pointToLayer: function(feature,latlng){
var marker = L.marker(latlng,{icon: geoIcon, riseOnHover: true});
marker.bindPopup(eval(popUpContent));
marker.on('mouseover',function() {
document.getElementById('sidebar').innerHTML = eval(sideBarContent);
});
marker.on('mouseout', function(){
document.getElementById('sidebar').innerHTML = " ";
});
return marker;
}
}).addTo(map);
});
};
var layer1pop = "feature.properties.name + '<br/>' + feature.properties.info";
var layer1side = "feature.properties.price + '<br/>' + feature.properties.web";
addGeoJson("points.geojson", undefined, undefined, layer1pop, layer1side);
...
...
</script>
我想将 addGeoJson 函数与多个 geoJSON 文件一起使用,并为每个文件使用不同的标记、弹出窗口、侧边栏等模板。在我看来切换似乎不够,以防我不知道 geoJSON 可以拥有多少属性,并且另外,如果我需要更改弹出窗口中属性项的顺序,例如,我可以只编辑 addGeoJson 基金的参数。如果我试图通过
,corse 会发生错误
var layer1pop = feature.properties.name + '<br/>' + feature.properties.info;
var layer1side = feature.properties.price + '<br/>' + feature.properties.web;
直接因为无法到达本地 feature
并且在传递参数时它甚至不存在。
我尝试用 new Function
替换它,但也无法访问 feature
。
你有什么想法吗?
谢谢。
为什么不换行marker.bindPopup(eval(popUpContent));
至 marker.bindPopup(feature.properties.name + '<br/>' + feature.properties.info);
并将相同的逻辑应用于第二个函数。
如果有什么阻碍你使用它,请重新编写它以使其工作。
eval 是一种邪恶的代码味道
如果映射不断变化(即您将使用 feature
的哪一部分)尝试传递一个知道要提取什么的函数
var layer1pop = function(feature){
return feature.properties.name + '<br/>' + feature.properties.info;
}
然后 marker.bindPopup(eval(popUpContent));
变成 marker.bindPopup(popUpContent(feature));
我想问你,在这段代码中省略 eval() func 是否合理。特别是
<script>
...
...
function addGeoJson (geoJsonPath, iconPath = "leaflet-2/images/marker-icon.png", iconSize = [30,50], popUpContent, sideBarContent)
{$.getJSON(geoJsonPath,function(data){
var geoIcon = L.icon({
iconUrl: iconPath,
iconSize: iconSize
});
L.geoJson(data,{
pointToLayer: function(feature,latlng){
var marker = L.marker(latlng,{icon: geoIcon, riseOnHover: true});
marker.bindPopup(eval(popUpContent));
marker.on('mouseover',function() {
document.getElementById('sidebar').innerHTML = eval(sideBarContent);
});
marker.on('mouseout', function(){
document.getElementById('sidebar').innerHTML = " ";
});
return marker;
}
}).addTo(map);
});
};
var layer1pop = "feature.properties.name + '<br/>' + feature.properties.info";
var layer1side = "feature.properties.price + '<br/>' + feature.properties.web";
addGeoJson("points.geojson", undefined, undefined, layer1pop, layer1side);
...
...
</script>
我想将 addGeoJson 函数与多个 geoJSON 文件一起使用,并为每个文件使用不同的标记、弹出窗口、侧边栏等模板。在我看来切换似乎不够,以防我不知道 geoJSON 可以拥有多少属性,并且另外,如果我需要更改弹出窗口中属性项的顺序,例如,我可以只编辑 addGeoJson 基金的参数。如果我试图通过
,corse 会发生错误var layer1pop = feature.properties.name + '<br/>' + feature.properties.info;
var layer1side = feature.properties.price + '<br/>' + feature.properties.web;
直接因为无法到达本地 feature
并且在传递参数时它甚至不存在。
我尝试用 new Function
替换它,但也无法访问 feature
。
你有什么想法吗? 谢谢。
为什么不换行marker.bindPopup(eval(popUpContent));
至 marker.bindPopup(feature.properties.name + '<br/>' + feature.properties.info);
并将相同的逻辑应用于第二个函数。
如果有什么阻碍你使用它,请重新编写它以使其工作。
eval 是一种邪恶的代码味道
如果映射不断变化(即您将使用 feature
的哪一部分)尝试传递一个知道要提取什么的函数
var layer1pop = function(feature){
return feature.properties.name + '<br/>' + feature.properties.info;
}
然后 marker.bindPopup(eval(popUpContent));
变成 marker.bindPopup(popUpContent(feature));