Клуб API Карт

При выделении пункта в списке, изменить цвет иконки на карте

up.deal
10 марта, 15:07

Добрый день. У меня есть список пунктов выдачи и при изменении в самом списке должен выбраться пункт выдачи на карте.

Выглядит это так:

По скринам видно, что при выборе Ленинградского проспекта точка не отмечается на карте, потому что она находится в кластере.

Вот текущий код:

$('#checkout-delivery-to-terminal input').on('ifChecked',function(){
        $('#checkout-delivery-to-terminal-terminal-tk').val($(this).closest('.terminal').attr('data-terminal-type'));

        var objectId = $(this).val();

        terminalsManager.objects.each(function(object){
          if(object.id == objectId){
            if(!checked_by_map){
              terminalsMap.setCenter(object.geometry.coordinates, 15);
            }else{
              checked_by_map = false;
            }
            terminalsManager.objects.setObjectOptions(object.id, {
              preset: 'islands#greenDotIcon'
            });
          }else{
            terminalsManager.objects.setObjectOptions(object.id, {
              preset: 'islands#blueIcon'
            });
          }
        });
      });
    });

Как выделить кластер? И может можете предложить вариант поэлегантнее?

2 комментария
Подписаться на комментарии к посту
Кластер можно получить из вызова getObjectState
Элегантнее хранить указатель на активный objectId например в terminalsManager.state
спасибо dimik'у за решение. В итоге получилось вот так:
$('#checkout-delivery-to-terminal input').on('ifChecked',function(){
$('#checkout-delivery-to-terminal-terminal-tk').val($(this).closest('.terminal').attr('data-terminal-type'));
var objectId = $(this).val();
var clusterId = terminalsManager.getObjectState(objectId).isClustered ? terminalsManager.getObjectState(objectId).cluster.id : false;
terminalsManager.clusters.each(function(cluster){
if(cluster.id == clusterId){
terminalsManager.clusters.setClusterOptions(clusterId, {
preset: 'islands#greenClusterIcons'
});
}else{
terminalsManager.clusters.setClusterOptions(cluster.id, {
preset: 'islands#blueClusterIcons'
});
}
});
terminalsManager.objects.each(function(object){
if(object.id == objectId){
terminalsManager.objects.setObjectOptions(object.id, {
preset: 'islands#greenDotIcon'
});
}else{
terminalsManager.objects.setObjectOptions(object.id, {
preset: 'islands#blueIcon'
});
}
});
});