动态创建的图层上的onSelect事件

时间:2013-04-16 11:08:01

标签: javascript openlayers

我正在创建动态充满功能的不同层,即时动态,并且在选择每个特定功能时我需要做一些事情。我不能在这里粘贴实际的源代码,因为它有依赖性,而且它也很长,但你可以想象如下:

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 个答案:

答案 0 :(得分: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);
    }
});