Клуб API Карт

Пробросить клик из templateLayoutFactory на соответствующую область кластера

storuky@rnds.pro
8 июля 2015, 13:56

Здравствуйте. У меня метки кластера имеют нефиксированную ширину. Соответственно просто наложить прямоугольный clusterIconShape не получится. Однако нужен функционал зума при клике.

Вытащил свои маркеры поверх перекрывающего слоя через z-index. Клики обрабатываются в clusterLayout:

var clusterLayout = ymaps.templateLayoutFactory.createClass("<div class='marker-label'></div>", {

        build: function () {

            clusterLayout.superclass.build.call(this);

            this._events = ymaps.domEvent.manager.group(this.getElement());

            this._events.add('click', function () {

                // fire click on cluster

            }, this);

        },

        clear: function () {

            this._events.removeAll();

            clusterLayout.superclass.clear.call(this);

        }

    });

 

Нужно пробросить клик на кластер или вызвать каким-то образом функцию clusterClickZoom на соответствующем кластере.

Как это можно сделать? Пример на Fiddle 

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

Что мешает вместо этих костылей перекрыть в макете метод getShape?

storuky@rnds.pro
8 июля 2015, 19:55
Не приложу ума, как можно этот метод применить... Можете показать конкретно?

Ну у вас же в getShape есть доступ к DOM-элементу и соответственно можно понять его размеры. Больше ничего и не нужно

 

Как-то так:

 

    getShape: function () {

      var element = $('.marker-label__body', this.getParentElement());

      var width = element[0].offsetWidth;

      var height = element[0].offsetHeight;

      var position = element.position();

      

      return new ymaps.shape.Rectangle(new ymaps.geometry.pixel.Rectangle([

        [position.left, position.top],

        [position.left + width, position.top + height]

      ]));

    }

storuky@rnds.pro
8 июля 2015, 20:21
Огромное вам спасибо! Очень выручили!