Клуб API Карт

Вывод сразу всех объектов на крату при загрузке

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

Привет!

Подскажите, пожалуйста, что нужно добавить в код примера карты с меню YMapsML (menufromymapsml.html ), что бы при загрузке карты она была не пустая, а что бы на ней сразу показывались все объекты из всех групп, а уже при выборе какой-либо группы в меню, показывались объекты только этой группы?

Вот этот код:

...

// Загрузка YMapsML
            var ml = new YMaps.YMapsML("http://site.ru/mapfiles/objects.xml");

            // Обработчик успешной загрузки
            YMaps.Events.observe(ml, ml.Events.Load, function (ml) {
                // Создание списка групп
                ml.get(0).forEach(function (item) {
                    addMenuItem(item, map, YMaps.jQuery("#menu"));
                });
            });

            // Обработчик неудачной загрузки
            YMaps.Events.observe(ml, ml.Events.Fault, function (ml, error) {
                alert("При загрузке данных произошла ошибка: " + error);
            });
        })

        // Добавление одного пункта в список
        function addMenuItem (group, map, menuContainer) {

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

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

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

                    return false;
                })

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

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

После appendTo допиште .click():



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

    Либо сделайте создаваемую ссылку именованной и работайте с ней. Тогда функция addMenuItem будет выглядеть следующим образом:



    // Добавление одного пункта в список
    function addMenuItem (group, map, menuContainer) {

        // Показать/скрыть группу на карте
        var link = YMaps.jQuery("" + group.name + "")
            .bind("click", function () {
                // Если пункт меню "неактивный", то добавляем группу на карту,
                // иначе - удаляем с карты
                if (link.hasClass("active")) {
                    map.removeOverlay(group);
                } else {
                    map.addOverlay(group);
                }

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

                return false;
            })

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

    Спасибо! Добавил .click(), таким образом точки из всех групп теперь выводятся сразу, но при выборе одной из групп в меню она не остается в единственном числе, а наооборот скрывается, когда остальные остаются: пример


    Видно что-то надо прописать дополнительно для .click()?


    Извиняюсь за такие вопросы )

    Так работает пример, который вы взяли за основу. При щелчке в меню группа скрывается, если была отображена на карте или показывается, если до этого не была добавлена на карту.

    ясно, спасибо!

    Антон Карцев
    28 января 2016, 07:22
    а  как должна выглядеть ссылка к этому коду?