Клуб API Карт

При добавлении объекта прописать ему действия

AngelOKES
17 июля 2015, 09:04

Добавляю в цикле свыше 1000 объектов на карту и хотелось бы при клике на любой объект было сразу прописано что делать. Примеры в песочнице никак не смогли мне помочь, настолько там примитивно всё, в документации примеров не нашёл. Помогите, уже всю голову сломал...

9 комментариев
Подписаться на комментарии к посту

По примерам АПИ не изучают.

В руководстве разработчика есть раздел про события.

https://tech.yandex.ru/maps/doc/jsapi/2.1/dg/concepts/events-docpage/

В справочнике полное описание интерфейса менеджера событий

У многих объектов есть поле events, которое указывает на инстанцию этого менеджера.

Так же описаны поля объекта-события которые кидаются на разных объектах АПИ

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

var myLB2 = new ymaps.control.ListBox({data: {title: 'ПС:'},
items: [new ymaps.control.ListBoxItem('Аэропорт 110/10'),
new ymaps.control.ListBoxItem('Береговая 110/10/6'),]});
myLB2.get(0).events.add('click', function () {map.setCenter([51.780502778,55.462422222],16);
var my1L00 = new ymaps.GeoObject({geometry: {type: 'LineString', coordinates: [[51.780502778,55.462422222],[51.78050277800,55.46242222200]]},properties:{hintContent: '0'}}, {draggable: true,    strokeColor: '#0000ff',    strokeWidth: 1});
map.geoObjects.add(my1L00);
myLB2.state.Set('expanded', false);});myLB2.get(1).events.add('click', function () {map.setCenter([51.761883333,55.125211111],16);
var my2L10 = new ymaps.GeoObject({geometry: {type: 'LineString', coordinates: [[51.761883333,55.125211111],[51.76188333300,55.12521111100]]},properties:{hintContent: '0'}}, {draggable: true,    strokeColor: '#0000ff',    strokeWidth: 1});
map.geoObjects.add(my2L10);
myLB2.state.Set('expanded', false);});
myLB2.state.set('expandOnClick', true);
map.controls.add(myLB2, {float: 'none', top: 5, right: 200})

То есть при выборе пункта он должен центрировать, это делается и рисуются нужные мне линии
Я просто в данном случае не понимаю, что за чем должно идти, возможно неправильная последовательность
Получается что вот на этой строке выдаёт ошибку: myLB2.state.Set('expanded', false);});

Лучше использовать делегирование событий – вместо того чтобы вешать обработчик на каждый элемент списка – повесить один на список.

И координаты лучше хранить в данных элемента списка чтобы не дублировать одно и то же, код сократится и ускорится в разы.

 

PS: Методы не могут называться с заглавной буквы (только имена классов), в javascript регистр символов имеет значение

Блин... точно... Set написал вместо set... Извиняюсь, глаза замылились наверное.
Я если честно не знаю как мне сделать, что вы мне советуете, я в принципе быстро учусь, но материалов в интернете мало, очень скудно и форумов почти нигде нет, я то учиться не прочь, но информации очень мало... Но буду смотреть конечно, недавно вроде как закончил с кластеризацией, теперь когда попал на поиск по своим объектам, в примере только надо загонять все объекты в коллекцию, снова в тупик попал, но если по-другому никак буду переписывать, хотелось бы чтобы всё было как у людей...
Спасибо!!!
Вы хотели этим примером показать, как вначале добавлять элементы в группу и после уже добавлять на карту и естественно ко всем объектам можно обращаться по группе... Но я же написал, что уже вполне изучил и применил кластеризацию, у меня на карте 5 разных видов кластеров. Значит создав новую коллекцию и добавив туда все кластеры я смогу осуществлять по ним поиск?

Я хотел показать как лучше использовать ListBox и эффективно слушать на нем события.

В вашем коде нет ничего про кластеризацию, коллекции и поиск.

 

Да кластеризация у меня ниже, там три строчки и всё работает, вот один из них:

clusterer3 = new ymaps.Clusterer({preset: 'twirl#darkorangeClusterIcons', clusterDisableClickZoom: true});
clusterer3.add(myPlg);
map.geoObjects.add(clusterer3);

Но это что касаемо объектов на карте, а вот с ListBox я как-то пока не до конца разобрался как оптимизировать...