Клуб API Карт

Шаблон для балуна кластера и ymaps.option.presetStorage

Пост в архиве.

1. Почему, если я пишу { clusterBalloonLayout: "twirl#balloon" }, то мне открывается балун по умолчанию, а если я пытаюсь создать preset, даже совсем пустой, на базе "twirl#balloon", то работать мы не хотим?

Предварительно делаю:

ymaps.options.presetStorage.add("my#balloon", { preset: "twirl#balloon", ... });

Не работает даже один preset, добавлять другие параметры не рискую ;-(

2. Что нужно написать в шаблоне, чтобы элемент, возвращаемый из cluster.balloon._balloon.getOverlay().getBalloonElement() возвращал первый элемент из моего html шаблона, переданного строкой, а не то же, что и cluster.balloon._balloon.getOverlay().getBalloonLayout().getParentElement()? Ибо в таком случае autoPan работает криво, т.к. плюсует к clientBoundingRect позицию самого себя (оверлея), а не элемента балуна.

p.s. Вот такое дело, повешанное на balloon-open, работает в mode=debug. el.balloon._balloon.getOverlay().getBalloonElement = function() { return document.getElementById('inner-balloon-id'); }; Без этого - autoPan работает криво. Ну и я точно уверен, что _element там указывает на ymaps.ymaps-balloon-overlay

3 комментария
1. Как вы дальше используете этот пресет и что именно не работает.
2. Вам скорее всего надо переопределить у вашего шаблона getClientBoundingRect, так чтобы он возвращал правильные данные именно для вашего шаблона. Это по сути абстратный метод.
Алексей Yarrr!
28 января 2016, 04:05

1. так: ...presetStorage.add("my#cluster", { preset: "cluster#icon", clusterBallonLayout: "twirl#balloon" }) - работает.

а так: ...presetStorage.add("my#balloon", { preset: " twirl#balloon " });

...presetStorage.add("my#cluster", { preset: "cluster#icon", clusterBallonLayout: "my#balloon" }) - не работает.

2. Да, методом научного тыка и чтения исходников уже дошел до этого. В документации, к сожалению, строго сказано, что переопределять можно build, rebuild, clear. Был сконфужен ;-(

Спасибо за ответ)

1. В clusterBallonLayout можно задавать только класс макета или ключ под которым ссылка на класс хранится в хранилище макетов.
Вы туда задаете ключ пресета, а макета с таким ключем нет.
У нас есть встроенные пресет с ключем twirl#balloon и встроенный макет с ключем twirl#balloon. Ключи одинаковые, но хранилища и объекты разные.
Если вы хотите наследовать пресет, то можно наследовать только 1, не больше.
2. Исправим доку в этом месте.