Клуб API Карт

Разное отображение балуна кластера и балуна одного объекта при настройки своего интерфейса балуна.

marj-erokhova
7 ноября 2013, 15:43

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

Возникла проблема 

var myBalloonLayout = ymaps.templateLayoutFactory.createClass([

'<div class=entry>',

            '<div class=bold>$[properties.balloonContentHeader]</div>',

            '<div>$[properties.balloonContentBody]</div>',

            '<div class=author>$[properties.balloonContentFooter]</div>',

            '</div>'

            ].join(''));

 

 то отображение балуна у кластера  и у объектов при распадании кластера корректное - инфу вижу. 

var myBalloonLayout = ymaps.templateLayoutFactory.createClass(

                '<h3>$[properties.name]</h3>' +

                '<p><strong>Адрес:</strong> $[properties.adres]</p>' +

                '<p><strong>Телефон:</strong>$[properties.telefon]</p>'+

'<p><strong>Тип:</strong>$[properties.type]</p>'

            );

 

То при просмотре балуна кластера вижу информацию "как хочу", а при распадании кластера на части, при нажатии на объект информации вообще нет никакой.

 

Что делать?

Подскажите, пожалуйста.

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

Приведите код, в котором вы задаете эти макеты через опции, а лучше пришлите ссылку на страницу.

http://gis.centerit35.ru/index1.html

http://gis.centerit35.ru/index.html

 

Еще возник вопрос. Почему при изменении php файла который генерирует xml  файл GeoObjectCollection, изменений на Яндекс картах нет?

Смотрите что у вас происходит в этих файлах.

В index1.html

 Вы перезадаете макет для туловища балуна кластера (то, как будет отображаться информация в балуне кластера).

При этом макет балуна метки вы не перезадаете. И у вас показывается стандартный макет метки. Поскольку он работает с полями balloonContentHeader и пр., все корректно - данные показываются.

 

В файле index.html

Вы перезадаете макет точно так же. Для метки все так же сохраняется стандартный макет. Но теперь в самой метке нет нужных ей данных (balloonContentHeader больше нет). Балун не может найти информацию для показа и считает себя пустым, поэтому не раскрывается.

Нужно помимо стилей для балуна кластера перезадать макет балуна для самой метки.

var clusterer = new ymaps.Clusterer({clusterBalloonContentBodyLayout: "cluster#balloonCarouselContent",clusterBalloonContentItemLayout: myBalloonLayout,clusterBalloonWidth: 500,clusterBalloonPagerSize: 15, // Задаем опции для меток без префикса cluster balloonContentBodyLayout: myBalloonLayout});По поводу php файла ничего сказать не могу)

Может быть просто срабатывает кеш браузера?

 

ЭТО происходит при каждой загрузке странице?

Да


Попробуйте добавлять уникальный параметр к Вашему YMapsML-урлу

 

ymaps.geoXml.load('http://gis.centerit35.ru/my1.php?v=' + Date.now())



Ну кнопку я вижу вы добавили, а что еще должно быть?

Я понял о чем речь.

Для такого поведения надо добавлять ваши кнопки в радио-группу

 

var radioGroup = new ymaps.control.RadioGroup({
        items: [            new ymaps.control.Button({ data: { content: 'Сохранить' } }),            new ymaps.control.Button({ data: { content: 'Включить' } })        ]    });myMap.controls.add(radioGroup, {left: 10, bottom: 20});

 

 

Добавьте в стандартный mapTools свою кнопку, он работает как радиогруппа

 

var mapTools = new ymaps.control.MapTools({
    items: [        'default',        new ymaps.control.Button({            data: {                content: 'Моя кнопка'            }        })            ]});myMap.controls.add(mapTools, { left: 10, bottom: 20 });

Марина, спасите-помогите еще рз, если это возможно!

 

Определяю кластер

        var industr_parks = new ymaps.Clusterer({
            clusterBalloonContentBodyLayout: "cluster#balloonCarouselContent",
            clusterBalloonContentItemLayout: IndustrParksBalloonStyle,
            clusterBalloonWidth: 500,
            clusterBalloonPagerSize: 15,
            balloonContentBodyLayout: IndustrParksBalloonStyle,
            clusterIconContentLayout: ContentBallonLayout,
            clusterIcons: IndustrParksIcons
        });
        var industr_parks_array = [];
        var addToIndustrParks = function (geoObject)
        {
            var buf = new ymaps.GeoObject({geometry: {...},
                                            properties: {...},
                                            options: {
                                                iconImageHref: './img/industr_parks_icon.png'
                                            }
                                        });
            industr_parks_array.push(buf);
        }

 

 

Вопрос вот в чем: для объекта иконку я определила  iconImageHref: './img/industr_parks_icon.png'

Для кластера иконка своя,

почему у меня не отображается иконка для 1ого объекта при распадении кластера?

В приведенном коде Вы определяете функцию addToIndustrParks,

которую потом не вызываете, откуда эта иконка должна появиться?


Гораздо эффективнее размещать ссылки на страницу с проблемой, а не обрывки кода, из которого ничего не понятно.

Просто код слишком болльшой, функция вызывается, поэтому и вопрос.

http://gis.centerit35.ru/

У вас в коде url до картинки прописан с ошибкой.

/.img/industr_parks_icon.png (сначала слеш, потом точка). Может в этом причина.

Не повлияло(

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

вместо 

var buf = new ymaps.GeoObject({geometry: {...},
                                            properties: {...},
                                            options: {
                                                iconImageHref: './img/industr_parks_icon.png'
                                            }
                                        });

нужно писать

var buf = new ymaps.GeoObject({

     geometry: {...},
     properties: {...}

}, {
     iconImageHref: './img/industr_parks_icon.png'
 });


 Я сама в этом синтаксисе путаюсь, поэтому для плейсмарков предпочитаю использовать шоткат Placemark =)

Спасибо, Марина!

Помогло!=)