Клуб API Карт

удаление метки

gggggggggreat
10 апреля 2012, 19:00

есть мой код, необходимо добавлять метки с возможностью их удаление


проблема в понимании получения указателя на удаляемую метку
 

map = new YMaps.Map(document.getElementById("YMapsID")
map.setCenter(new YMaps.GeoPoint(30.39177,59.923642), 10); // default center
map.enableScrollZoom( // скрол зум
map.addControl(zoomControl); // кнопочный зум

toolbar = new YMaps.ToolBar([
new YMaps.ToolBar.MoveButton(),
new YMaps.ToolBar.RulerButton()
]
// Создает кнопку-переключатель для включения оверлея компании
button = new YMaps.ToolBarRadioButton(YMaps.ToolBar.DEFAULT_GROUP, {
icon: "1.png",
hint: "определение предприятия на карте"
}
toolbar.add(button);
map.addControl(toolbar);



YMaps.Events.observe(button, button.Events.Select, function () {
myEventListener = YMaps.Events.observe(map, map.Events.Click, function (map, mEvent) {

var myHtml = "</p><p class="point_caption">Подпись к точке:</p><p><textarea id="point_description" class="textarea_balun_title"></textarea>

<textarea id="point_description" class="textarea_balun_description"></textarea>

<a id="delete_point_inscription" class="delete_point_inscription" href="#">Удалить точку</a>";

 

var take_coordinates = mEvent.getCoordPoint(
placemark = new YMaps.Placemark(take_coordinates, {style: "default#cafeIcon"}
placemark.setBalloonContent(myHtml);
map.addOverlay(placemark);
placemark.openBalloon(

}
}, toolbar);

YMaps.Events.observe(button, button.Events.Deselect, function () {
myEventListener.cleanup(
}, toolbar);

//удаляем метку
YMaps.Events.observe(map, map.Events.BalloonOpen, function ()
{
$("#delete_point_inscription").click(function(){
map.removeOverlay(placemark); // !!!____вот эту метку не могу удалить___!!!
return false;
}
}, this);

 

перепробовал уже много способов и не знаю, где правда, пока так как надо не работает:(  , удаляется только последняя метка

10 комментариев
Подписаться на комментарии к посту

зачем вообще нужен обработчик map.Events.BalloonOpen?

убрал, но в таком случае вообще не происходит удаления, надо как то сослаться на placemark, которому принадлежит такой - то id, как я понимаю

что мешает написать код удаления в том обработчике, в котором есть ссылка на placemark?

map.Events.Click

удаляется опять же только последяя добавленная метка(

наверное так и должно быть,

если для удаления использовать один и тот же id

#delete_point_inscription

просто такой функционал реализован в конструкторе схем проезда, но найти код у яндекса я не смог, они постарались его запрятать

изменил на такой вариант

YMaps.Events.observe(button, button.Events.Select, function () {

myEventListener = YMaps.Events.observe(map, map.Events.Click, function (map, mEvent) {

ident++;

var myHtml = "

Подпись к точке:




Удалить точку";

var take_coordinates = mEvent.getCoordPoint();

            placemark_name = 'baloon_'+ident;

placemark_name = new YMaps.Placemark(take_coordinates, {style: "default#cafeIcon"});

placemark_name.setBalloonContent(myHtml);

            map.addOverlay(placemark_name);

            placemark_name.openBalloon();

 

 

$('.delete_point_inscription').click(function(){

var clickId = this.id;

alert(clickId);

map.removeOverlay(clickId);

return false;

});

});

}, toolbar);

////////////////////

т.е. ID совпадает для метки и для ссылки удаления, но ничего не происходит, хотя в removeOverlay точно записывается имя метки для удаления


может всеже ктото подскажет, где искать исстину

 

map.removeOverlay(clickId);

 

все же map.removeOverlay не id оверлея принимает, а ссылку на оверлей.

Вы опять излишне все усложнили. Главная идея состоит в том что метод setBalloonContent принимает кроме строки еще и HTML Element. Почему бы этим не воспользоваться?

 

myEventListener = YMaps.Events.observe(map, map.Events.Click, function (map, e) {

var coords = e.getCoordPoint(),

    placemark = new YMaps.Placemark(coords, {style: "default#cafeIcon"}),

    element = $('

Подпись к точке:

Удалить точку')

    .find('a')

    .click(function(e) {

     e.preventDefault();

     map.removeOverlay(placemark);

}).end();

 

    placemark.setBalloonContent(element[0]);
    map.addOverlay(placemark);
    placemark.openBalloon();
});

 

что не работает? Ошиблись при копи-пасте?

я вижу что работает

:-)прости, просто руки не из того места, спасибо большое