Клуб API Карт

Перемещаемые метки в API Яндекс.Карт 2.0

Пост в архиве.

Переношу проект с 1.1 на 2.0. В тупике уже второй день по поводу перемещения меток с определением координат по DragEnd.

 

В 1.1 все делалось просто:

var selectedOnMapPointer = new YMaps.Placemark(startGeoPoint,{'draggable': true,'hasBalloon': false,});
// Событие перетаскивания указателя по карте
YMaps.Events.observe(selectedOnMapPointer, selectedOnMapPointer.Events.DragEnd);
});
Код 2.0:
//драгэнд
selectPointMap.events.add('ondragend', function(e) {
var coords = e.get('coordPosition');
selectPointMap.geoObjects.add(new ymaps.Placemark(coords, {}, {
'draggable': true,
'hasBalloon': false,
}));
setCoordsInForm(coords);
});
почему-то не работает, полагаю из-за 'ondragend',

И такой код:
//дабл клик
selectPointMap.events.add('dblclick', function(e) {
var coords = e.get('coordPosition');
selectPointMap.geoObjects.add(new ymaps.Placemark(coords, {}, {
'draggable': true,
'hasBalloon': false,
'iconImageHref': "i/icon-added.png?v2",
'iconImageSize': [35, 31],
'iconImageOffset': [-10, -31]
}));
setCoordsInForm(coords);
});
всякий раз создает новую метку. Как сделать так чтобы предыдущая метка стиралась?
3 комментария
Нет события ondragend. Есть dragend.
Чтобы метка стиралась, ее нужно стирать. Т.е. нужно сохранить на нее ссылку, а потом сделать selectPointMap.geoObjects.remove(placemark)
Алексей Yarrr!
28 января 2016, 04:08

Кстати, по поводу remove. В доках у geoObjects есть removeAll, в функционале в коллекциях removeAll тоже есть, а в geoObjects метода нет. Забыли переопределить, похоже?

http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/map.GeoObjects.xml - removeAll нет и так задумано, т.к. это очень небезопасный вызов. В map.geoObjects добаляют объекты разные контролы, например роутер.