2016-02-05 29 views
0

先不工作,我得到那么所有的矢量层评价,如果它是可见的,并得到它的名字。然后我想删除该层上的所有过滤器,然后刷新。获得通过类(矢量)层,然后刷新使用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 
}); 
+0

你应该认真考虑升级。 OL2非常过时。现在,4.2是乐趣所在。 –

回答

1

在检查控制台,所述层不具有刷新功能的原因是,它不能访问该变量。 为了解决这个问题,而不是使用:

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 
     });   
    } 
}; 

变量就改成这样: enter image description here

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 
      });   
     } 
    }; 
+0

该变量是一个数组,并且必须通过索引访问其元素。发现。 UPVOTED –