2013-04-16 41 views
0

我创建了不同的动态图层,动态地显示了所有功能,一切都在运行中,而且我需要在选择每个特定功能时执行一些操作。我不能在这里贴实际的源代码,因为它有依赖和它的相当长的还可以,但你能想象像下面这样:onSelect event on dynamic created layers

if (e.Bubbles) { 
    jQuery.each(e.Bubbles, function (i, obj) { 
     jQuery.each(obj, function (n, el) { 

      /* features and layers ... */ 
      var point = new OpenLayers.Geometry.Point(el[1],el[0]); 

      /* some code here ... */ 
     }); 

     layer = new OpenLayers.Layer.Vector(i, {styleMap: e.Style}); 
     map.addLayer(layer); 
     e.Layers.push(layer); 

     /* etc. */ 

当我试图将onSelect事件绑定到层,它可以工作,但它取代了以前的图层行为,因此当您单击要素时,loop中的最后一层可以正常工作,但只能在最后一层。这里是我的代码(内循环):

selectControl = new OpenLayers.Control.SelectFeature(
    Layer, 
    { 
     clickout: false, 
     toggle: false, 
     multiple: false, 
     hover: false, 
    } 
); 

selectControl.activate(); 

layer.events.on({ 
    "featureselected": function(event) { 
     console.log(event.feature); 
    } 
}); 

所以,selectControl将在循环中,每次更换,就会失去其自身的功能,对于以前的,只是适用于最新层。

我试过把所有的图层都作为一个数组(这应该是可行的),但没有任何成功。

selectControl = new OpenLayers.Control.SelectFeature(
    e.Layers, 
    { 
     clickout: false, 
     toggle: false, 
     multiple: false, 
     hover: false, 
     onSelect: function(event) { 
      console.log(event.feature); 
     }, 
    } 
); 

selectControl.activate(); 

回答

1

所以,这里是答案!

if (typeof selectControl == "object") { 
    selectControl.setLayer(map.getLayersByClass("OpenLayers.Layer.Vector")); 

} else { 

    selectControl = new OpenLayers.Control.SelectFeature(
     layer, 
     { 
      clickout: false, 
      toggle: false, 
      multiple: false, 
      hover: false, 
     } 
    ); 

    map.addControl(selectControl); 
    selectControl.activate();    
} 

layer.events.on({ 
    "featureselected": function(event) { 
     console.log(event.feature); 
    } 
}); 
相关问题