Клуб API Карт

Вызов пользовательского меню по клику на списке.

Пост в архиве.
lobakin.a.v
14 января 2012, 00:58

Здравствуйте!

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

Вот кусок кода формирующий список из 3 пунктов. По по клику на пункте выводятся на карту соответствующие группы точек и "map.addControl(new OfficeNavigator(group));" создает элемент меню со списком этих точек, при нажатии на который в свою очередь карта центруется по заданной точке и открывается балун.

Подскажите как сделать так, чтобы при выборе любого из 3х пунктов выводились точки и меню OfficeNavigator только текущего пункта, а остальные точки стирались.

Сейчас получается, что меню OfficeNavigator просто наслаиваются друг на друга и не удаляются, а при добавлении в if строки"map.removeAllOverlays()" метки удаляются, но вместе с размеченными полигонами, которые хотелось бы оставить.

 for (var i = 0; i < groups.length; i++) {
addMenuItem(groups[i], map, YMaps.jQuery("#menu")
                           }
// Добавление одного пункта в список
function addMenuItem (group, map, menuContainer) {
// Показать/скрыть группу на карте
    YMaps.jQuery("<a class=\"title\" href=\"#\">" + group.title + "</a>")
        .bind("click", function () {
            var link = YMaps.jQuery(this);
 // Если пункт меню "неактивный", то добавляем группу на карту,
 // иначе - удаляем с карты
            if (link.hasClass("active")) {
                map.addOverlay(group);
 // Создание управляющего элемента "Путеводитель по офисам"
                 var navigator = new OfficeNavigator(group);
                 map.addControl(navigator);
            } else {
                 map.removeOverlay(group);
                 map.removeControl(navigator);
                    }
// Меняем "активность" пункта меню
            link.toggleClass("active");
            return false;
                })

// Добавление нового пункта меню в список
        .appendTo(
             YMaps.jQuery("<li></li>").appendTo(menuContainer)
                )
        };

1 комментарий

Наверное эти примеры только мешают вам в решении этой задачи,

не все можно скопипастить, подправив пару строк.

 

В вашем случае нужно хранить ссылки на все 3 контрола (navigator) и удалять их с карты при клике на пункт меню,

добавляя только контрол связанный с текущим пунктом (на котором кликнули)

Для начала попробуйте сформировать с нуля объект (javascript-объект) с данными для всех групп.

и на его основании сформировать структуру меню и конролы с метками для каждой группы