通过 class(向量)获取图层然后使用 Openlayer 2.14 刷新不起作用

Get layers by class (Vector) then refresh does not work using Openlayer 2.14

首先,我获取了所有矢量图层,然后评估它是否可见并获取其名称。然后我想删除该层上的所有过滤器然后刷新。

这是代码片段:

var mLayers = map.getLayersByClass("OpenLayers.Layer.Vector");
for(var a = 0; a < mLayers.length; a++ ){
    if(mLayers[a].getVisibility()){     
        var layerName = mLayers[a].name;
        var vlayer = map.getLayersByName(layerName);
        //console.log(vlayer);
        vlayer.filter = null;
        vlayer.refresh({
            force: true
        });         
    }
};

它抛出一个错误:

Uncaught TypeError: vlayer.refresh is not a function

我注意到如果我使用矢量图层的赋值变量,刷新工作。

例如:

var vector_bldg =new OpenLayers.Layer.Vector("Buildings", {
...
}

然后

vector_bldg .filter = null;
vector_bldg .refresh({
    force: true
});

查看控制台,图层没有刷新功能的原因是无法访问变量。 要解决这个问题,而不是使用:

var mLayers = map.getLayersByClass("OpenLayers.Layer.Vector");
for(var a = 0; a < mLayers.length; a++ ){
    if(mLayers[a].getVisibility()){     
        var layerName = mLayers[a].name;
        var vlayer = map.getLayersByName(layerName);
        //console.log(vlayer);
        vlayer.filter = null;
        vlayer.refresh({
            force: true
        });         
    }
};

只需将变量更改为:

var mLayers = map.getLayersByClass("OpenLayers.Layer.Vector");
    for(var a = 0; a < mLayers.length; a++ ){
        if(mLayers[a].getVisibility()){     
            var layerName = mLayers[a].name;
            var vlayer = map.getLayersByName(layerName);
            //console.log(vlayer);
            vlayer[0].filter = null;
            vlayer[0].refresh({
                force: true
            });         
        }
    };