Клуб API Карт

Программный вызов события в API v2

Пост в архиве.
zhukdl
7 июня 2012, 21:25

Привет.

Что-то никак не найду ответ на вопрос

Каков аналог YMaps.Events.notify

Т.е. как мне программно толкнуть событие, например, на click на метке

Или кликнуть свою кнопку в тубаре :)

 

Заранее спасибо

10 комментариев

метод называется fire

Ну это я предполагал.

Можно простой пример с меткой

placemark.events.fire('click', new ymaps.Event({    target : placemark,    coordPosition : [55.7, 37.5]}, true));

Отлично, спасибо.

Как раз не мог вникнуть во второй параметр

Еще есть упрощенный синтаксис:

placemark.events.fire('click', {

    target: placemark,

    coordPosition: [55.7, 37.5]

});

Ну у меня прокатил вызов кнопки в тулбаре так

btnPlacemarkList.events.fire("click", new ymaps.Event(
btnPlacemarkList,
 true));

Правильно или нет - не знаю, но работает.

Оно прокатило, но не является корректной записью.

Сравните ваш пример и пример, приведенный Бабушкой-бетменом.

Ну или не сравнивайте, если работает ;)

Но мне не нужны координаты фиг знает чего.

Т.е.

1 - у меня есть тулбар. Я хочу программно кликнуть кнопку.

2 - у меня есть метка, я хочу ее программно кликнуть.

 

По первому примеру - координаты не нужны. Ок, target подставлю, проверю.

Что касается метки, конечно, у меня есть ее координаты чтобы передать, но зачем, мне теоретически не понятно, я понимаю, передать весь объект (ну ссылку, чтобы Вы не придрались :))

 

PS В обработке событий вы поменяли логику, но все равно пока я не понял логику их порождения и распространения. Если в первой версии при переписывании клика на метке балун нужно было заставлять открываться через placemark.openBalloon() (а не порождая еще одно событие уже для балуна),

то теперь он (балун) сам открывается автоматом, я так понимаю на основании свойства наличия балуна

Идея в том, что в конструктор Events передается хэш с любыми данными. В вашем случае передается список геообъектов. То есть такое создание события ничего не ломает, но и смысовой нагрузки не несет.

 

Не поняла ваш постскриптум =)

Теперь я понял, Вы передаете координаты, чтобы их потом как-нибудь обработать, я я просто передал ссылку на свою метку.

Про PS - это так, отступление. Просто в раньше при переопределении клика на метке мне все равно надо было принудительно открывать балун, т.к. он не открывался. И открывать его надо было через порождение другого события (BalloonOpen).

А если я добавлял дополнительный элемент управления, то из его вызова чтобы получить балун метки мне приходилось порождать placemark.openBalloon(), т.к. вызов события для метки не прокатывал.

Сечас же балун при переопределении сам открывается. А дальше пока не исследовал, т.е. из дополнитльного элемента я пока также делаю .balloon.open().

 

Давайте объясню по другому

1 - есть метки, на них переопределен click

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

Например, 2 метки, плик по первой - открыть балун, по второй - сменить масштаб.

Идея следующая - из списка меток при клике на элементе просто порождать события клика на той метке, к которой относится элемент. Т.е. если я кликаю на первом элементе списка - порождается событие клика на первой метке.

Дак вот, теперь результат

API v1

- на метке, где надо вывести балун, вызывается событие Events.BalloonOpen

- на элементе списка приходится копировать весь код, т.к. не прокатывает порождение Events.Click для метки

Проблема как раз состояла в балуне, т.е. он не засвечивается

 

API v2

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

- на элементе списка если я правильно все тестировал, тоже не прокатывало порождение клика на метке, и также пришлось копировать код из метки.

Да ладно, может через месяц-другой соображу что к чему, т.к. только эта вторая неделя использования второго АПИ