Клуб API Карт

Как переопределить метку кластера путем вычислений?

divined
11 марта 2014, 16:51

myClusterer = new ymaps.Clusterer({
   clusterIcons: clusterIcons,
   clusterIconContentLayout: myIconContentLayout,
});

myClusterer.createCluster = function(center, geoObjects) {
  var count = 0;
  for (var i = 0, l = geoObjects.length; i < l; i ++) {
    count += geoObjects[i].count; //Записанное колисчество объектов на метке (работает)
  }
  var createCluster = ymaps.Clusterer.prototype.createCluster;
  cluster = createCluster.call(this,center,geoObjects);
  cluster.name = count; //Добавляю свое поле к кластеру
  return cluster;
};

myIconContentLayout = ymaps.templateLayoutFactory.createClass('$[name]'); //Пытаюсь обратится к этому полю через шаблонизатор

Собственно, необходимо в шаблонизаторе вычислить некоторое значение и вывести его как метку кластера.

 

На http://api.yandex.ru/maps/doc/jsapi/2.x-stable/ref/reference/Clusterer.xml вообще не описано таких опций как clusterIconContentLayout.

Нашел обрывками в песочнице.

На странице описания кластера видим что подобное поле может принимать значение Функции или строки:

iconContentLayout Function | String

Но нигде не видим как же определить эту самую функцию и какие параметры мы можем в нее передать.

Обращаемся к http://api.yandex.ru/maps/doc/jsapi/2.x-stable/ref/reference/templateLayoutFactory.xml, где видим что нам доступны какие-то поля, но опять таки не понятно что это за поля и откуда их брать. Методом перебора?

Так же мы можем увидеть что возможно создать свою функцию построения, но опять таки какие параметры нам доступны?

Все описание АПИ построено по принципу "отвалите я накалякал". Поиск информации занимает от 2-х дней и более.

4 комментария
Подписаться на комментарии к посту

Ну вы как-то странно искали.

Описание опции есть тут http://api.yandex.ru/maps/doc/jsapi/2.x-stable/ref/reference/Cluster.xml

Макет содержимого метки кластера. (Тип: конструктор объекта с интерфейсом ILayout или ключ макета).

Значение по умолчанию: 'cluster#iconContent'

 

На этой же странице есть пример, как перезадать именно интересующую вас опцию http://api.yandex.ru/maps/doc/jsapi/2.x-stable/ref/reference/Cluster.xml (см. первый же пример после описания опций).

 

Задайте поле name в данные кластера 

cluster.properties.set('name', 'myName').

 

И обращайтесь к нему в шаблоне ymaps.templateLayoutFactory.createClass('$[properties.name]')

Благодарю.

Понимаю ваше негодование, но никто не идеален, даже Яндекс ;-)

Теперь к сути дела: функция iconContentLayout, если относится к кластеру, будет называться clusterIconContentLayout

Я как-то задавал похожий вопрос, мне дали половину ответа, вторую половину сам нашел методом проб и ошибок.

У меня у кластера вычисляется количество просмотренных элементов и записывается через слэш перед общим количеством.
Делается это у меня довольно тупо, вот отрывки кода http://jsfiddle.net/24eeN/

Благодарю.