Javascript OpenLayers按钮触发的函数问题

Javascript OpenLayers按钮触发的函数问题,javascript,function,button,openlayers,Javascript,Function,Button,Openlayers,我在OpenLayers面板中添加了一些toggle_类型的按钮来打开/关闭矢量层(每个按钮控制矢量层的可见性)。该映射还有一个selectFeature事件侦听器,它在另一个div中显示功能属性 当只为一层编码时,它就工作了。但是,如果我将代码更改为使用数组添加多个层,那么问题就开始了。 我使用一个数组(capasVectoriales)来存储从JSON文件创建的向量层。执行此操作时,按钮触发的停用功能开始执行奇怪的操作,不会删除图层并在地图上“打印”特征(平移和缩放时不会移动)。 当我再次激

我在OpenLayers面板中添加了一些toggle_类型的按钮来打开/关闭矢量层(每个按钮控制矢量层的可见性)。该映射还有一个selectFeature事件侦听器,它在另一个div中显示功能属性

当只为一层编码时,它就工作了。但是,如果我将代码更改为使用数组添加多个层,那么问题就开始了。 我使用一个数组(capasVectoriales)来存储从JSON文件创建的向量层。执行此操作时,按钮触发的停用功能开始执行奇怪的操作,不会删除图层并在地图上“打印”特征(平移和缩放时不会移动)。 当我再次激活该按钮时,功能将按预期运行。我可以使用map.removeLayer(map.layers[1])从Firebug中删除图层。 这是代码

            function init() { .....

            capaRestauracion=capasVectoriales[0];

            var funcionActivarRestauracion= function() {
                map.addLayer(capaRestauracion);
                console.log('turn on' + capaRestauracion.name);
            };
            var funcionDesactivarRestauracion= function() {
                map.removeLayer(capaRestauracion);
                console.log('turno off ' + capaRestauracion.name);
            };

            // create type_toggle button
            var botonRestauracion = new OpenLayers.Control.Button({
                displayClass : 'boton' + capa,
                eventListeners : {
                    'activate' : funcionActivarRestauracion,
                    'deactivate' : funcionDesactivarRestauracion
                },
                title : 'Activar/Desactivar ' + capa,
                type : OpenLayers.Control.TYPE_TOGGLE
            });

            //create an external panel
            panelExterno = new OpenLayers.Control.Panel({
                div : document.getElementById("panel")
            });
            //add buttons to external panel

            panelExterno.addControls([botonRestauracion]);

            // add panel to map
            map.addControl(panelExterno);


            //activate button

            panelExterno.controls[0].activate();

            // create the select feature control
            var selector = new OpenLayers.Control.SelectFeature(capasVectoriales, {
                hover : true,
                autoActivate : true
            });


            map.addControl(selector);

当我试图用“capaVectorial[0]”数组项替换“capaVectorial”变量时,似乎出现了问题,但我不明白为什么。

问题在于Control.SelectFeature表达式。我必须为capasVectoriales[0]vector_layer对象添加选择器,而不是capasVectoriales数组。我在某个地方读到,你是如何将一个选择特性控件添加到各个向量层的。所以,现在的问题是:如何将控制选择器功能添加到各种向量层?提前感谢。Control.SelectFeatures允许使用数组。我用layer.setVisibility解决了这个问题,没有添加和删除层。似乎当您添加选择器时,另一层被添加到地图(“OpenLayers.Control.SelectFeature\u 46\u容器”)。如果删除任何图层,您仍然可以看到它,就像电视上的苍蝇一样:您可以缩放和平移,但删除的图层特征保持在div的相同坐标中。如果删除SelectFeature\u X\u容器,则按钮触发的功能可以工作。我不明白为什么会出现容器层。知道吗?好像找到了OpenLayers.Layer.Vector.RootContainer!