Клуб API Карт

Обернуть в функцию добавление обработчика событий

Пост в архиве.
i.tugerin
22 марта 2013, 12:33

Создаю и добавляю на карту кнопки (для примера покажу две):

function create_button(name,image,title) { 

   window[name] = new ymaps.control.Button({ data: { image: image, title: title } });

   return name;

}

create_button("connection","images/connection.png","Кнопка1");

create_button("problem","images/problem.png","Кнопка2");

map.controls.add(connection,{left:'5',top:'37'}).add(problem,{left:'36',top:'37'});

 

Необходимо для каждой кнопки добавить обработчики событий, в виде функции обертки:

function add_event(name) {

name.events.add('select', function () {

...

});

name.events.add('deselect', function () {

...

});

return name;

}

add_event("connection");

add_event("problem");

 

Возвращает - Uncaught TypeError: Cannot call method 'add' of undefined

Как правильно обернуть в функцию навешивание обработчиков событий?

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

Другая проблема:

function add_event(name) {

name.events.add('select', function () {

map.geoObjects.add(nameCollection);

});

name.events.add('deselect', function () {

map.geoObjects.remove(nameCollection);

});

}

add_event(connection);

Возвращает - Uncaught ReferenceError: Collection is not defined

Как в функции обертки обратиться в данном случае к коллекции - connectionCollection?


Вернее - как получить имя объекта, передаваемого функции?

Имя объекта получил так:

function create_button(name,image,title) { 

window[name] = new ymaps.control.Button({ data: { image: image, title: title, name: name } });

return name;

}

function add_event(type) {

var collect = type.data._i.name + 'Collection';

type.events.add('select', function () {

map.geoObjects.add(collect);

});

type.events.add('deselect', function () {

map.geoObjects.remove(collect);

});

}

add_event(connection);

Но все равно не работает - Uncaught TypeError: Object connectionCollection has no method 'getParent'

у вас имя события - строка,

а вы берете у него поле events и удивляетесь что ошибка )))

type.data._i.name + 'Collection'; - как быть?

в js не силен :\

type.data._i.name + 'Collection'; - как быть?

не надо использовать педальные поля  

 

в js не силен :\

лучше тогда поручить тому кто силен.

 

не могли бы привести пример?

Пример чего?

Как мой пример поможет Вам изучить javascript?

Пример аналогичной функции, описанной выше,

чтобы она работала. 

Вопрос исчерпан, решил самостоятельно.