2012-03-16 24 views
4

此代码原样正常工作,但它似乎取决于在添加控件之前要添加到地图中的图层。情况总是如此,或者我做错了什么?多点击控制 - 在添加控件之前是否必须将图层添加到地图中?

  var highlightCtrl = new OpenLayers.Control.SelectFeature([a,b], { 
       hover: true, 
       highlightOnly: true, 
       renderIntent: "temporary", 
       eventListeners: {      
        featurehighlighted: make_popup, 
        featureunhighlighted: kill_popup 
       } 
      }); 

      var selectControl = new OpenLayers.Control.SelectFeature([a,b,c,d], { 
       clickout: true, 
       toggle: false, 
       multiple: false, 
       hover: false 
      }); 

      map.addLayer(a); 
      map.addLayer(b); 
      map.addLayer(c); 
      map.addLayer(d); 

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

回答

1

不,它不依赖于添加控件之前添加到地图的图层。正如你可以从this example看到的。您可以在将图层添加到地图之前添加SelectFeature控件并将其激活。

相关的代码:

var selectControl = new OpenLayers.Control.SelectFeature(vectorLayer, { 
    hover: false, 
    highlightOnly: false, 
    toggle: false, 
    renderIntent: "select" 
}); 

map.addControl(selectControl); 

selectControl.activate(); 

map.addLayer(vectorLayer); //<-- layer added at the end 
+1

是的,但是当你添加另一个vectorLayer它打破:http://jsfiddle.net/kFdkH/ BTW,我从来没有听说过的jsfiddle--是真棒感谢分享! – Jonathan 2012-03-16 15:42:10

+1

为了告诉你实话,我从来没有料到我上面提到的情况已经奏效。我最初的回应是说YES ...似乎是依赖的。但是在对上述案例进行测试后,证明你的问题并非总是如此。也就是说,我总是在将图层添加到控件之前将图层添加到地图中。我如何期望selectControl能够高亮地图上不存在的图层?这就是为什么上面的情况让我感到吃惊,而且我被迫将我原来的YES答案改为NO。但你是出于好奇才问的吗?我只是坚持添加到地图上。 – capdragon 2012-03-16 16:02:53

+0

好吧,我有很多图层悬停弹出窗口和点击功能,但我想异步加载它们,所以如果用户没有看到这些数据,它们都不会产生一堆不必要的调用让事情更快一点。但是我的问题出现了,当我没有添加图层时,点击/悬停功能无法工作,除非在添加控件之前添加它们。 – Jonathan 2012-03-20 11:35:00