* 使用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
当我只在两个地方改变一个单词( manholes,stormdrains等 ....)时,这似乎是很多冗余的代码。所以,我试图将这个过程简化为:
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
});
};
请不要假设我知道为什么我使用 _ __ _ _ 而不是 _ __ _ ;或者为什么我我应该做 _ ___ _ __ _ < / EM> __ _ _ 即可。我开始这篇文章时承认我缺乏理解。
以下是我正在使用的代码。我没有像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
});
};
现在我有四个新的,单独的对象,名为人孔,风暴,重力线,泵站,其行为完全相同,就像我以原始方式创建它们一样(顶部的第一个代码示例)
答案 0 :(得分:2)
for (x = 0; i < layerlist.length; i++) {
var layerlist[i] = new L.TileLayer.WMS("http://wms.server.address", {
layers: layerlist[i],
format: 'image/png8',
transparent: true
});
};
注意你是如何声明x然后在循环中使用i的? (这是一个循环,顺便说一下。)
大概是如果你将x= 0
转换为var i = 0
(这里声明var更安全,以防万一你的代码中的某个地方全局范围内有另一个i
意外踩)你应该得到你需要的东西(假设你的其余代码指向一个名为L的东西,这里没有显示)。
哦,var layerList[i]
也错了。
首先你想要像这样在循环中声明一个layerList数组:
var layerList = new Array();
然后你可以通过
添加它layerList[i]; // notice NO var here
所以结果将是
var layerList = new Array();
for (var i = 0; i < layerlist.length; i++) {
layerList[i] = new L.TileLayer.WMS("http://wms.server.address", {
layers: layerlist[i],
format: 'image/png8',
transparent: true
});
};
答案 1 :(得分:0)
我注意到的主要内容是你的构造函数( _ _),你从x = 0开始,然后切换到使用i作为你的迭代器变量。尝试在构造函数中使用i切换x,看看是否能满足您的需求;除此之外,它似乎非常有用。