Клуб API Карт

Опять глупые вопросы, пока нет примеров в документации ) )

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

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

EPointBal = iMap.balloon.open(coord, {
contentBody: 'test'
}


Смотрю справку:
Метод - setData
И как этот метод вызвать ?

Я конечно чую что как то так: EPointBal.SetData( но вот тут что ???

помогите пжалуста, а то пока так и не доходит принципы использования свойств и методов )

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

смотрю в документацию в map.Balloon вижу, метод open

open(position, data, options)BalloonОткрывает балун на карте в заданной точке.

тыцаю на ссылку Balloon, смотрю что есть в options

contentBodyLayoutFunction|String Макет для заголовка содержимого балуна. (Тип: конструктор объекта с интерфейсомILayout).

Значит нужно вызвать балун с этой опцией и передать ей строку или макет

итого:

 

iMap.balloon.open(coord, {}, {
  contentBodyLayout: 'test'
});

и вроде бы всё.

Вопрос, зачем если есть нормальная документация, нужны примеры про 2+2?

Как изначально данные вписать то я знаю ) - а вот как поменять их потом через яваскрипт функцию

нужно создавать свой макет, который будет брать данные из properties,

в твоей функции обновлять properties

хороший пример есть в документации

А как в переопределяемых методах достучаться до properties не подскажите ?

 

А то в шаблоне их можно юзать, а вот как значения в, например, том же переопределаямом build уже нельзя.

setData вызывать не нужно. Нужно модифицировать данные которые уже есть.

А как модифицировать то ?. И вес равно - как пользоваться SetData ) для других случаев )

EPointBal.data.set(key,value)

Как и везде в общем

http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/Balloon.xml

подскажите, а почему 

при

            plmark.balloon.open() ;

баллун пустой, хотя 

у этой plmark

properties = {

                        balloonName: 'name',

                        balloonContent: 'description'

                },

  

откуда вы взяли такие поля балуна?

balloonName, balloonContent

Из примера создания метки:

http://api.yandex.ru/maps/doc/jsapi/2.x/update/concepts/update.xml

 

// Создание метки  var myPlacemark = new ymaps.Placemark( // Координаты метки [55.8, 37.6], { /* Свойства метки: - контент значка метки */ iconContent: "Москва", // - контент балуна метки balloonContent: "Столица России" }, { /* Опции метки: - флаг перетаскивания метки */ draggable: true, /* - показывать значок метки при открытии балуна */ hideIconOnBallon: false } ); // Добавление метки на карту myMap.geoObjects.add(myPlacemark);

balloonName я там не увидел

а приведите весь ваш код создания метки

если создавать метку как в примере, то при нажатии на неё открывается балун с содержанием:"Столица России".

 

А я создаю метки так: 

function createPlacemark (point, description) {

var properties = {

                        balloonContent: description

                },

                options = { balloonCloseButton: true };

            var placemark = new ymaps.Placemark(point, properties, options);

return placemark;

}

 

кроме того вывожу список географических объектов и навешиваю событие onclick.

Нажимаем на объект - появляется балун:

item.balloon.open() ; // item - элемент коллекции меток

балун показывается где надо, но он пустой. 

и когда на метку нажимаешь, то балун не показывается. хмм... 

 

 

balloonCloseButton: true - значение по-умолчанию и его можно не указывать.


Этот код у меня работает и балун открывается

function createPlacemark (point, description) {

    return new ymaps.Placemark(point, {balloonContent : description});                                                                                                                             

}

map.geoObjects.add(createPlacemark(map.getCenter(), 'Центр карты'));

хорошо, спасибо!

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

  пробовал таким образом: myMap.balloon.open(coord, {}, {
  contentBodyLayout: 'test'
}    - выдает ошибки

(this._D is undefined

a is undefined

)

 

            myPlacemark.events.add('dragend', function (e) {
                    var  placemark = e.get('target');
                    var coord = placemark.geometry.getCoordinates();
                    var myGeocoder = ymaps.geocode(coord, { results: 1 });
                    myGeocoder.then(function (res) {

                         //myMap.balloon.open(coord, {}, {
                         //  contentBodyLayout: 'test'
                         //  }

                    });
           });

 

 

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

  пробовал таким образом: myMap.balloon.open(coord, {}, {
  contentBodyLayout: 'test'
}

Кажется вы перепутали свойста и опции (данные и настройки)

myMap.balloon.open(coord, {"content" : "test" });

Спасибо!

Еще такой вопрос, в обработчике событий хочу изменить вид балуна с такого на такой

                myGeocoder.then(function (res) {
                    geoResult = res.geoObjects.get(0);

                   geoResult.properties.set("balloonContent", 'Текст');

                });

Как изменить в этом случае стиль балуна?

myGeocoder.then(function (res) {
    geoResult = res.geoObjects.get(0);

    map.geoObjects.add(new ymaps.Placemark(geoResult.geometry.getCoordinates(), { balloonContent : 'text' }));

});

Задал таким образом:

                    geoResult = new ymaps.Placemark(coord, {
                        balloonContent: 'Текст'
                    });
                   
                    myMap.geoObjects.add(geoResult);

Через properties.set почему то не ставится