Клуб API Карт

Кастомная метка и динамическое изменение

brainraider.game
9 октября 2015, 22:47

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

У меня динамически добавляются на карту метки с пользователями. Метка используется кастомная:

var commonContent = ymaps.templateLayoutFactory.createClass(
'<div class="map-marker" id="m-' + params.id + '" style="display: none;"></div>'
);
var marker = new ymaps.Placemark([parseFloat(latitude), parseFloat(longitude)], {
    iconContent: ''
}, {
    iconLayout: commonContent,
    iconImageSize: [0, 0],
    iconImageOffset: [0, 0],
    iconImageHref: '',
});
Далее при получении информации с сервера я пытаюсь изменить iconContent. Средствами 
marker.properties.set({iconContent: ...}) не получается, поэтому приходится обращаться
напрямую к DOM и вставлять html.
После этого я устанавливаю контент balloon'а через properties.set. Это срабатывает 
без проблем.
И лишь после этого я могу узнать длину и высоту получившейся метки (т.к. в ней 
прописывается название). Соответственно, правильную iconShape (Polygon) я могу
задать только в этот момент. Но iconShape можно задать только до добавления geoObject.
Вытекающие вопросы:
1) Как лучше создать метку без изображения с динамическим контентом?
2) Как правильно менять iconContent?
3) Как после изменения метки изменить ее активную область?
Заранее спасибо за ответы.
4 комментария
Подписаться на комментарии к посту
У вас же свой собственный макет иконки. Укажите в шаблоне макета {{ properties.iconContent }}
Для расчёта iconShape динамически нужно использовать метод макета getShape
Аналогичный пример для балуна
https://github.com/dimik/ymaps/blob/gh-pages/examples/2.1/balloon-autopan/index.html#L110

Большое спасибо за ответ.

Подскажите, пожалуйста, как я могу навесить автообновление на свои поля properties.

Т.е. если мы устанавливаем содержимое через iconContent, то при обновлении этого свойства изменения автоматически применяются к маркеру. Но если я использую какие-либо собственные поля, например status, то при их изменении ничего не происходит. 

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

Да, действительно. Спасибо большое, теперь все отлично.