Клуб API Карт

Ручная перерисовка значков кластера

Krem-Ilia
22 ноября 2016, 15:00

У меня есть лейаут, добавленный вот так:

ymaps.layout.storage
  .add(
    'obj#clusterLayout',
    ymaps.templateLayoutFactory.createClass(`<code .../>`, {
      build: function() { ... }
    }
  );

Там внутри билда определяется, находится ли определённая метка внутри кластера и в зависимости от этого, значок кластера меняет цвет.

У меня есть событие после которого эта метка меняется и тогда может получится так, что цвет кластера перестаёт быть актуальным.

Можно как-то вызвать все эти билды для всех видимых кластеров вручную?

ymap.container.fitToViewport();

не помогает.

Спасибо.

9 комментариев
Подписаться на комментарии к посту
Вы можете подписаться в build на нужное событие boundschange? А в clear отписаться от него. В обработчике события вызвать rebuild на макете
dimik,
 наверно могу. Я кажется понял суть, но не очень понял, как мне поможет boundschange. Если я внутри build добавляю `map.events.add('boundschange', onBoundsChange);`, то он же не вызывается, когда я делаю там что-то с меткой.
Krem-Ilia,
Я не очень понял, что именно вы хотите от fitToViewport. Но в принципе какое событие слушать это уже детали. Вы можете слушать/кидать своё кастомное событие на карте или вообще на любом объекте
dimik,
мне бы как-то стригерить перерисовку карты - вот что я хочу по сути.
Я думал, что fitToViewport даст карте понять, что надо её перерисовать, а в ходе перерисовки вызовутся билды видимых кластеров.
dimik,
я могу скажем сделать такое действие - отдалить карту, а затем снова приблизить. Но это некрасивое решение.
dimik,
Да, я сделал так - отзумил и призумил и задача решена.
Можно так сформулировать мою хотелку - нужно вызвать методы clear/build/rebuild (rebuild только наверно) у всех видимых объектов.
Krem-Ilia,
upd: только так возникает эффект этот мигающий. Он не сильно плох, но тем не менее такое решение конечно не очень корректное.
Krem-Ilia,
Вы показали только макет, ответ ещё зависит как вы добавили объекты на карту с этим макетом. Соберите пример на jsfiddle, я помогу сделать оптимально
dimik,
ок, попробую, но принудительно вызывать перерисовку всех значков кластера кроме чем как сделать зум туда-обратно нельзя, верно? Ну или сдвижением карты чуть в одну сторону и чуть обратно.
Обновлено 23 ноября 2016, 12:07