У меня проблемы с OpenLayers и я не регистрирую события кликов, которые добавляются в слой.По сути, мне нужно сделать следующее:
Когда пользователь нажимает на маркер, он получает пузырь, на котором есть ссылка «изменить».Пользователь щелкает по нему, и он создает новый слой на карте, а затем регистрирует событие щелчка на карте, ожидая, когда пользователь щелкнет по карте.Когда они щелкают где-то на карте, он перемещает маркер туда, где они щелкнули.Это все работает отлично.
Однако проблема заключается в том, что пользователь нажимает, чтобы отредактировать маркер, а затем нажимает кнопку ВНЕ КАРТЫ, чтобы отменить действие и НЕ перемещать маркер, отменяя регистрацию события clickне работаетОни по-прежнему могут нажимать на карту, и она перемещает маркер.
Вот пример кода:
function move_marker(marker) {
lmLayer = new OpenLayers.Layer.Markers("Landmark Creation",{displayInLayerSwitcher: false});
map.addLayer(lmLayer);
map.events.register("click", lmLayer, function(evt){
var pixel = new OpenLayers.Pixel(evt.clientX,evt.clientY);
position = map.getLonLatFromPixel(pixel);
marker.lonlat = pixel;
marker.moveTo(pixel);
marker.draw();
lmLayer.redraw();
OpenLayers.Event.stop(evt);
});
}
function cancel_move() { // this function is triggered by a button outside of the map element
lmLayer = map.getLayersByName('Landmark Creation');
lmLayer[0].events.unregister("click");
map.events.unregister("click");
map.removeLayer(lmLayer[0]);
}
Как вы можете видеть в функции отмены, я получаю слойпо имени слоя, который в соответствии с console.log находит по индексу 0. Я добавил незарегистрированный элемент в lmLayer в надежде, что это поможет, но пока не повезло.Затем к элементу карты я добавляю вызов отмены регистрации и, наконец, удаляю этот новый слой, потому что мы не хотим, чтобы он мешал.
Буду признателен за некоторые отзывы об этом.Я схожу с ума.
Спасибо!