Клуб API Карт

Event баг

nolan23
4 мая 2013, 12:32

Нашел багу в 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 комментариев
Подписаться на комментарии к посту

А в чем баг?)

Вываливается ошибка: 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 - ссылка на объект, породивший событие.
тем более, оверрайдить переменные кастомного события - некошерно.кстати, раньше этого не было, возникло где-то с месяц назад.

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

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

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

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

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

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

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

спасибо.

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

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

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

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