2015-07-02 97 views
1

我想删除我在js类中添加的地图的交互,但是当我尝试删除其他类中的交互时,我不知道该如何操作,因为我无法访问中,我需要的类交互对象.....OL3删除拖动框交互

我有这样的代码(我加的互动):

... 
var dragBox = new ol.interaction.DragBox({ 
     condition: ol.events.condition.always, 
     style: new ol.style.Style({ 
      stroke: new ol.style.Stroke({ 
       color: [0, 0, 255, 1] 
      }) 
     }) 
    }); 

    mapa.addInteraction(dragBox); 

    dragBox.on('boxend', function(e) { 
     if (capaActiva != null) { 
      var info = []; 
      var extent = dragBox.getGeometry().getExtent(); 
      var ext = extent.toString().split(','); 

      var ext1 = ext[0]; 
      var ext2 = ext[1]; 
      var ext3 = ext[2]; 
      var ext4 = ext[3]; 

      var tfn = ol.proj.getTransform('EPSG:3857', 'EPSG:4326'); 
      var textent = ol.extent.applyTransform([ext1, ext2, ext3, ext4], tfn).toString(); 
... 

一个js的类删除互动:

... 
cerrar: function(){ 
    mapa.removeInteraction(dragBox); 
} 
... 

在第二类I o出现错误:

dragBox is not defined 

如何访问和删除第二类中的交互?

回答

1

dragBox需要在两个范围内都可访问。

没有看到更多的代码它很难说,但你可以做

this.dragBox = new ol.interaction.DragBox({ 
     condition: ol.events.condition.always, 
     style: new ol.style.Style({ 
      stroke: new ol.style.Stroke({ 
       color: [0, 0, 255, 1] 
      }) 
     }) 
    }); 

    mapa.addInteraction(this.dragBox); 

    this.dragBox.on('boxend', function(e) { ...... 

....................... 
cerrar: function(){ 
    mapa.removeInteraction(dragBox); 
} 

如果不是在同一个对象,那么你需要确保dragbox变量是从两个范围访问

+0

是的,谢谢,但我想在我的应用程序关闭一个窗口时删除交互,为此我不能把变量放在这个类中,我需要在窗口类中的变量,我该怎么做? – davids182009

+0

你可能想考虑你的应用程序是如何构造的,因为一般来说全局变量很糟糕。但是,如果你做window.dragBox = ....这将使它在全球范围内可用 – noveyak