多点击控制 - 在添加控件之前是否必须将图层添加到地图中?
问题描述:
此代码原样正常工作,但它似乎取决于在添加控件之前要添加到地图中的图层。情况总是如此,或者我做错了什么?多点击控制 - 在添加控件之前是否必须将图层添加到地图中?
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();
答
不,它不依赖于添加控件之前添加到地图的图层。正如你可以从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
是的,但是当你添加另一个vectorLayer它打破:http://jsfiddle.net/kFdkH/ BTW,我从来没有听说过的jsfiddle--是真棒感谢分享! – Jonathan 2012-03-16 15:42:10
为了告诉你实话,我从来没有料到我上面提到的情况已经奏效。我最初的回应是说YES ...似乎是依赖的。但是在对上述案例进行测试后,证明你的问题并非总是如此。也就是说,我总是在将图层添加到控件之前将图层添加到地图中。我如何期望selectControl能够高亮地图上不存在的图层?这就是为什么上面的情况让我感到吃惊,而且我被迫将我原来的YES答案改为NO。但你是出于好奇才问的吗?我只是坚持添加到地图上。 – capdragon 2012-03-16 16:02:53
好吧,我有很多图层悬停弹出窗口和点击功能,但我想异步加载它们,所以如果用户没有看到这些数据,它们都不会产生一堆不必要的调用让事情更快一点。但是我的问题出现了,当我没有添加图层时,点击/悬停功能无法工作,除非在添加控件之前添加它们。 – Jonathan 2012-03-20 11:35:00