Клуб API Карт

Проблема с удалением события

Пост в архиве.
firmaaralplus
24 мая 2012, 18:46

Есть ссылка на метку curPointObj

включаю возможность перемещения и прописываю событие, через время пытаюсь удалить событие

 

curPointObj.options.set('draggable', true);

curPointObj.events.add("dragend", function (obj){alert('dragend');}, curPointObj);

...

curPointObj.events.remove("dragend", function (obj){alert('dragend');}, curPointObj);

и так

curPointObj.events.remove("dragend", function (obj){}, curPointObj);

 

и еще массу вариантов, событие не удаляется

 

сработал только вариант, когда сначала описал функцию и затем ее прописал в событие

var fname = function  (obj)

{

...

}

curPointObj.events.add("dragend", fname);

curPointObj.events.remove("dragend", fname);

событие удалилось, но в таком варианте в прописанный параметр obj ничего не передавалось

 

Что в первом варианте я делаю неправильно?

 

и еще заметил, что если использоваться на метке events.removeAll(), то пропадает возможность перемещения метки

и появляется только после

curPointObj.options.set('draggable', false);

curPointObj.options.set('draggable', true);

 

Спасибо, Алексей.

 

----------

 

Вернее в fname в параметре obj передается что-то к, но это не является меткой curPointObj

когда я поместил в функцию alert(obj.geometry.getCoordinates()) при срабатывании функции alert вообще не было, а... открылся балун!

1 комментарий

В первом случае слушатель не снимался, потому что фактически вы оперировали двумя разными функциями - да, формально они одинаковые, но это 2 разных объекта, которые не равны между собой.

Если вы вызываете removeAll у метки, вы очищаете абсолютно все слушатели событий этой метки. В том числе могут убиться слушатели, которые навешивались внутри апи и отвечали за реакцию на таскание метки. removeAll стоит вызывать только на группах.

var listeners = placemark.events.group();

listeners.add('click', ......)

......

listeners.removeAll();