Клуб API Карт

диспетчер объектов для YMapsML

graykun
15 июня 2010, 15:36

добрый день.

как использовать диспетчер объектов например в этом примере:

http://api.yandex.ru/maps/ymapsml/examples/menufromymapsml.html

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

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

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

 метки в диспетчер объектов записал:




        YMaps.Events.observe(ml, ml.Events.Load, function (ml) {
            objManager = new YMaps.ObjectManager();
            ml.get(0).forEach(function (item) {    
               
                for (i = 0; i < item.length(); i++)   {
                    objManager.add(item.get(i));
                }
                addMenuItem(item, map, YMaps.jQuery("#menu"));
            });

        });

а привязать группы к меню как???


 



function addMenuItem (group, map, menuContainer) {  // Добавление одного пункта в список
            YMaps.jQuery("" + group.name + "")  
                .bind("click", function () {
                    var link = YMaps.jQuery(this);

                    if (link.hasClass("active")) {
                        map.removeOverlay(group);  ////?
                    } else {
                        //map.addOverlay(group);  ////?
            map.addOverlay(objManager);  ////?? не правильно

                    }
                    link.toggleClass("active");            
            
                    return false;
                })
                .appendTo(YMaps.jQuery("<i> ").appendTo(menuContainer))
        };  

 

Можно модифицировать функцию addMenuItem, чтобы на карту добавлялась не группы, а диспетчеры объектов:



function addMenuItem (group, map, menuContainer) {
    var objManager = new YMaps.ObjectManager();

    for (var i = 0, l = group.length); i < l; i++) {
        objManager.add(group.get(i));
    }

    // Показать/скрыть группу на карте
    YMaps.jQuery("" + group.name + "")
        .bind("click", function () {
            var link = YMaps.jQuery(this);

            // Если пункт меню "неактивный", то добавляем группу на карту,
            // иначе - удаляем с карты
            if (link.hasClass("active")) {
                map.removeOverlay(objManager);
            } else {
                map.addOverlay(objManager);
            }

            // Меняем "активность" пункта меню
            link.toggleClass("active");

            return false;
        })

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

    спасибо)

    Владимир Д
    13 марта 2012, 09:46

    К сожалению не работает, не знаю в чём ошибка, помогите разобраться. 

    // Загрузка YMapsMLvar ml = new YMaps.YMapsML("http://api.yandex.ru/maps/ymapsml/examples/xml/menufromymapsml.xml") ;// Обработчик успешной загрузкиYMaps.Events.observe(ml, ml.Events.Load, function (ml) {    var objManager = new YMaps.ObjectManager() ;    ml.get(0).forEach(function (obj) {        objManager.add(obj);    }) ;    map.addOverlay(objManager);}) ;

    И выдаёт ошибку именно на этом моменте.