Клуб API Карт

Как при создании тулбара сразу же повесить на кнопки нужные события

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

Код:

myMap.controls.add(new ymaps.control.ToolBar([
new ymaps.control.Button({data: {content: 'Общий вид' }},{ ? СОБЫТИЕ ПО КЛИКУ ? }}),
new ymaps.control.Button({data: {content: 'Въезд в посёлок' }}),
new ymaps.control.Button({data: {content: 'Спортивная зона' }})
]), {right: '5',top: '5'});

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

Нет, так не получится.

Прийдется создавать кнопки чуть раньше и вешать на них click

Либо сделать себе фабрику

 

function makeButton(button, onclick){

  button.events.add('click',onclick);

  return button;

}

myMap.controls.add(new ymaps.control.ToolBar([
makeButton(ymaps.control.Button({data: {content: 'Общий вид' }}), function(){/**onclick**/}),

]), {right: '5',top: '5'});

 

Ваш код заработал после вставки new перед ymaps.control.Button:

function makeButton(button, onclick) { button.events.add('click',onclick); return button; }
   
myMap.controls.add(new ymaps.control.ToolBar([
makeButton(new ymaps.control.Button({data: {content: '1' }}), function(){alert(1);}),
makeButton(new ymaps.control.Button({data: {content: '2' }}), function(){alert(2);})
]), {right: '5',top: '5'});

Спасибо!

Извиняюсь за ошибочку - неудобный редактор кода в клубе.

Можно повесить обработчик события на тулбар и в объекте события в "target" будет та кнопка по которой кликнули

Спасибо, полезная инфа на будущее.

Вообще именно этот способ является красивым и правильным. Я бы настойчиво рекомендовала слушать клик на toolBar =)