Клуб API Карт

Event баг

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

Нашел багу в event

 

var myMap;

 

// Дождёмся загрузки API и готовности DOM.

ymaps.ready(init);

 

function init () {

    // Создание экземпляра карты и его привязка к контейнеру с

    // заданным id ("map").

    myMap = new ymaps.Map('map', {

        // При инициализации карты обязательно нужно указать

        // её центр и коэффициент масштабирования.

        center:[55.76, 37.64], // Москва

        zoom:10

    });

   

    myMap.events.add('click', function() {

       var coords = myMap.getCenter();

        myMap.events.fire("myclick", {coords: coords, c: coords});

    }).

        add('myclick', function(e) {

            alert(e.get('c').join(','));  // работает

            alert(e.get('coords').join(',')); // не работает

        });

 

    document.getElementById('destroyButton').onclick = function () {

        // Для уничтожения используется метод destroy.

        myMap.destroy();

    };

 

}

 

10 комментариев
Алексей Yarrr!
28 января 2016, 02:13

А в чем баг?)

Вываливается ошибка: Uncaught Error: MapEvent.getDomEventPixels: dom-событие не найдено

Она нам намекает, что get('coords') пытается дернуть соотв. метод, т.е. coords переопределяется на уровне Event

Это фича, скорее. Просто назовите не coords, а, например, mapCenter.

слушай, ты бы не позорился, что ли...

я прекрасно знаю как это обойти. более того, в примере я УЖЕ обошел.

вот тут скорее всего:

overrideStorage.add('coordPosition', coordsOverride);overrideStorage.add('coords', coordsOverride);просто про этот оверрайд в документации не написано.написано только про
get(name)ObjectВозвращает значение поля из originalEvent. originalEvent всегда имеет следующие поля:
  • type - строковый тип события;
  • target - ссылка на объект, породивший событие.
тем более, оверрайдить переменные кастомного события - некошерно.кстати, раньше этого не было, возникло где-то с месяц назад.
Алексей Yarrr!
28 января 2016, 02:13

какой вопрос — такой ответ ;-)

про оверрайд — согласен. не должно быть. либо хотя бы наоборот — оверрайдить умолчания.

какой вопрос?? я разве чего спрашивал?

Недокументированная магия returns. Часть третья.

Алексей Yarrr!
28 января 2016, 02:13

По возможности, http://jsfiddle.net/qfox/HtcWk/

Sergey Konstantinov
28 января 2016, 02:13

Вот так будет работать:

myMap.events.fire("myclick", new ymaps.Event({coords: coords, c: coords}));

Если передан не IEvent, а просто данные - карта создаст свой экземпляр события, а у него coords переопределён.

спасибо.

может, тогда убрать передачу параметров хэшем?

если он параметры переопределяет ;-)

Sergey Konstantinov
28 января 2016, 02:13

Это просто удобно, пусть будет.

Люди, кидающие свои события, как-нибудь осилят с этим разобраться, мне кажется :)