Клуб API Карт

Нужен вычисляемый аналог iconContent для кластера

KDV
25 февраля 2016, 12:50

День добрый.

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

Ранее по совету из этого клуба использовал создание пользовательского clusterIconContentLayout с переопределением метода build, но у данного решения есть огромный минус не только в избыточности и неэлегантности кода, но и в отсутствии возможности пересчитывать значение внутри метки кластера в процессе изменения объектов в его составе ибо значение внутри метки кластера формируется 1 раз при его создании, а потом уже не меняется.

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

PS Когда уже введете поле clusterIconContent для кластера дабы писать в него напрямую по аналогии как у Placemark ?

8 комментариев
Подписаться на комментарии к посту
Можно вызывать rebuild внутри макета
dimik,
Неплохо былоб хотяб сокращенный пример увидеть ибо инфы по rebuild кот наплакал и в доке и в клубе, кроме того, что он есть нислова о его применении или правильном вызове в данном случае.
KDV,
Выложите свой пример с clusterIconContentLayout на jsfiddle, попробую помочь его поправить
dimik,
https://jsfiddle.net/t5srcw94/
KDV,
Имелось ввиду выложить работающий пример, чтобы карта отображалась, а не просто код.

В Вашем варианте все еще проще – нужно использовать в шаблоне макета поле данных (properties) которого изначально нет в кластеризаторе, в методе build его рассчитать и назначить в properties, что соответственно приведет к автоперестроению макета

http://jsfiddle.net/xs5on9bq/
dimik,
Спасибо за наводку насчет свойств шаблона - позволило немного "украсить" код, но это однако не решило проблему с обновлением содержимого метки кластера при изменении свойств объектов в его составе.

PS Полный необходимый для отображения карты код привести не могу ибо там AJAX и еще много чего накручено не относящегося к данной проблеме.

Немного поясню: суть в том, что есть куча объектов Placemark у которых через AJAX обновляется свойство value. В метку кластера попадает минимальное из всех value вошедших в него Placemark. При изменении этих value у Placemark в составе кластера надо обновить и метку самого кластера тоже, т.к. минимум мог измениться.

PPS Когда уже в интерфейсе клуба можно будет найти свои посты, ибо искать через ключевые слова свои же темы то еще извращение.

Обновил фрагмент кода кластеризации: https://jsfiddle.net/t5srcw94/1/
KDV,
Ничего не мешает обновлять iconContent кластера и вне макета.
Кластер в который вошла метка можно получить из метода кластеризатора getObjectState

Обновил пример
http://jsfiddle.net/xs5on9bq/3/
dimik,
Несколько сбили с толку сначала предложив сделать все в макете, а теперь наоборот за его пределами.
Про getObjectState() я в курсе, уже приходилось им пользоваться, думал есть более изящные решения, но в итоге вопрос можно считать решенным.