动态创建的图层名称,eval() 的问题

Dynamically created layer names, problems with eval()

我想使用从数据库中获取的名称创建一些图层。 "Trees" 在数据库中成为 "Layer_Trees" openlayers 层。 我用 eval 函数尝试了很多东西,但没有成功。似乎它完全不能定义新变量。

function addLayer_ImageWMS(SourceName,SourceLayerName) {

    LayerName="Layer_" + SourceLayerName;

    eval(LayerName) = new ol.layer.Image({
        title: LayerName,                
        source: new ol.source.ImageWMS({
            url: SourceName,
            params: {
            'LAYERS': SourceLayerName, 
            'TRANSPARENT': 'true'
            }
        })
    })  
    LayersArray.push(LayerName);

}

如果我删除 "eval()" 一切正常,但无法从外部访问图层。 Openlayers 3. 我必须从这个函数的外部解决这个层,因为它们是通过菜单打开和关闭的。 有什么简单的方法可以做到这一点吗?

我打算用这样的代码打开和关闭它们:

SourceName = "Layer_" + $(layer).children("#SourceName").val();
IsChecked = $(layer).children(".Style_LayerList_Radiobutton").prop("checked");
eval(SourceName).setVisible(IsChecked);

您不需要 eval。只需使用这样的对象:

var layers = {};
layers['Layer_' + SourceLayerName] = new ...;

稍后您可以通过以下方式访问图层:

layers['Layer_Trees'].setVisible(true);