*使用 Genia S 的代码。我已将我的“解决方法”附加到帖子的底部*
3 个小时的浏览论坛和尝试代码片段让我头晕目眩。我的主要问题是我不是程序员,我将代码拼凑在一起,直到我让它工作为止。任何解释或指导将不胜感激。变量、对象、数组在某些方面似乎都是一样的,我不明白其中的复杂性。
我想去掉这段代码的重复性(使用leafletjs作为构造函数)。复制/粘贴相同的代码 20-30 次似乎并不优雅:
var manholes = new L.TileLayer.WMS("http://wms.server.address", {
layers: 'manholes',
format: 'image/png8',
transparent: true
});
var stormdrains = new L.TileLayer.WMS("http://wms.server.address", {
layers: 'stormdrains',
format: 'image/png8',
transparent: true
});
continued for each layer I need to create
当我只在两个地方更改一个词(沙井、雨水管等....)时,这似乎是很多冗余代码。所以,我试图将这个过程简化为:
var layerlist = ["manholes","stormdrains","gravitylines","pumpstations"];
for (i = 0; i < layerlist.length; i++) {
var layerlist[i] = new L.TileLayer.WMS("http://wms.server.address", {
layers: layerlist[i],
format: 'image/png8',
transparent: true
});
};
请不要假设我知道我为什么使用_ __ _ _ 而不是 _ __ _;或者为什么我在应该做_ __ _ __ _ _时做_ ____。我通过承认我缺乏理解开始了这篇文章。
下面是我正在使用的代码。我没有按照 Genia 的建议推送到新数组,而是使用 window[] 创建新对象(我不知道这是如何工作的)。我使用 Genia 解决方案的问题是,在代码的更深处,leafletjs 抛出异常,试图使用 . 符号。如果这可以补救,我很高兴学习。感谢大家的帮助,感谢 Genia 的评论和回复。所有不好的做法和被屠杀的代码都是我自己做的,没有任何负面的东西应该归咎于 Genia。
var layerlist = ["manholes","stormdrains","gravitylines","pumpstations"];
for (var i = 0; i < layerlist.length; i++) {
var name = String(layerlist[i])
window[name] = new L.TileLayer.WMS(ramnode, {
layers: name,
format: 'image/png8',
transparent: true
});
};
现在我有四个新的独立对象,分别命名为沙井、雨水管、重力线、泵站,它们的行为与我以原始方式创建它们的方式完全相同(顶部的第一个代码示例)