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