Клуб API Карт

API 2.0 Как обновить содержимое балуна для метки?

Topor Alexei
5 июля 2012, 13:03

Загружаю список меток из моей карты на Яндекс.Карты.

        ymaps.geoXml.load(url).then(function (res) {
            res.geoObjects.each(function (item) {
                if (item) {
                    item.options.set("preset", "twirl#houseIcon");

                   item.properties.set("name", "Новый заголовок");
                }
            });

Пытаюсь поменять заголовок балуна, но он не меняется. Само свойство name меняется - я проверял, но содержимое балуна не перегенерируется заново.

Шаблон балуна:

<div style="max-width:400px;*width:400px;"><strong>$[name]</strong><div>$[description]</div></div>

Как правильно обновлять содержимое балуна в коде?

UPD: кусок кода, который обновляет заголовок:

        ymaps.geoXml.load(url).then(function (res) {

            myMap.geoObjects.add(res.geoObjects);
            res.geoObjects.each(function (item) {
                if (item) {

                    item.properties.set("name", "Новый заголовок");
                    item.options.set("preset", "twirl#houseIcon");
                }
            });

Или пример здесь

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

Когда вы выставляете другой preset геообъекту, лэйаут балуна, берется от туда. Попробуйте указать preset коллекции res.geoObjects.options.set('preset', 'twirl#houseIcon');

Это не помогает. Выставлял в конце пресет коллекции, изменял пресет отдельному геообъекту после изменением заголовка - ничего.

 

Странно, я вот так изменял поле name в объектах из моей карты:

res.geoObjects.each(function (obj) {
                obj.properties.set('name', obj.properties.get('name') + 1);

                obj.options.set("preset", "twirl#houseIcon");
            })

И все применяется.

Перепроверил еще раз. Тестовая страница находится - здесь

Скрины firebug-a и балуна на карте

Браузеры: Chrome 20.0.1132.47 m, FF 13.0.1, IE9. Везде одинаково.

В начале заголовка по-идее должны стоять символы #####, но их нет.

Верно, вы добавляете каждый геообъект по отдельности на карту

myMap.geoObjects.add(item);

Т.е. он пропадает из коллекции res.geoObjects, для которой задан лэаут балуна, т.е. геообъекты перестают наследовать опцию лэйаута балуна.
Просто добавляйте коллекцию res.geoObjects сразу на карту, а не в цикле
map.geoObjects.add(res.geoObjects);

Спасибо, вы мне очень помогли.