Клуб API Карт

Отлов события BaloonClose. Как же все-таки реализовать?

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

Что то не могу поймать это событие( Вешал как на мап, так и на владельца балуна - полигон. Ниразу событие так и не произошло((

Дальше больше:

Пробуем отловить все события карты и пишем результат в консоль firebug:

for (_event in map.Events)

    YMaps.Events.observe(map, _event, function () {
        console.log(_event);
    });

В результате получаем только отлов события ChangeType.... Никаких BaloonClose не отловилось... Даже при вызове map.update() Событие update также не происходит....

Думается мне что я что то нетак делаю, каково ваше мнение?

ЗЫ:

Код приводить не буду, тк он довольно большой, пробовал на примерах то же самое( Значит я не правильно использую observe?

3 комментария
Sergey Konstantinov
28 января 2016, 08:21
Вы совершаете элементарную ошибку: а именно, объявленные Вами функции-обработчики
function () {
    console.log(_event);
}
содержат ссылку на одну и ту же переменную event. Поэтому в консоль всегда попадает одно и то же значение, а именно ChangeType.
Если Вы хотите этого избежать, то обработчики необходимо навешивать так:

for (_event in map.Events)

    YMaps.Events.observe(map, _event, getObserver(_event));


function getObserver (event) {

    return function () {

      console.log(_event);

  }

};


Событие же BalloonClose Вы не можете поймать, потому что пишете его неправильно: нужно писать с удвоенной l: BalloonClose
только не YMaps.Events.observe(map, _event, getObserver(_event));

а

YMaps.Events.observe(map, map.Events[_event], getObserver(_event));
Спасибо ответившим))) Так и думал что ошибка очевидна)