Почему не меняется шаблон метки на карте в фабрике?
Мне нужно при определенном зуме изменить шаблон метки (беру пример из документации) Но в моём случае не работает. А именно:
- не могу достучаться до карты
- не меняется на самой карте элемент, при том, с самим элементом по коду можно взаимодействовать
Для начала то, как я размещаю элементы на карте:
- Составляю features - json объект, со списком точек, в которые передаю данные (id, тип, геометрия, проперти, опции. В опции определяю макет иконки)
features[{type: ..., id:..., geometry:{}, options: {iconLayout: pointFunc(zoom)} ... }]
objectManager.add(feautures);
map.geoObjects.add(objectManager);
Макет иконки, это класс templateLayoutFactory, в моём случае функция, которая его возвращает ,как в примере документации:
var pointFunc = function (getZoom) { var pointLayoutWithImage = ymaps.templateLayoutFactory.createClass('<div class="map-point-icon-image"><img src="$[properties.data.type_ico]" /><div class="additional-info">$[properties.data.option_cost_prepaid]</div></div>', { build: function () { pointLayoutWithImage.superclass.build.call(this); var element = this.getParentElement().getElementsByClassName('map-point-icon-image')[0]; if (!this.inited) { this.inited = true; logistics.map.events.add('boundschange', function () { var currentZoom = getZoom(); if (currentZoom > 11) { element.classList.add('big-zoom'); element.style.width = '200px'; this.rebuild(); } } , this); } var options = this.getData().options; var shape = { type: 'Circle', coordinates: [23, 23], radius: 23, }; console.log(this.getData().geoObjects); options.set('shape', shape); }, }); return pointLayoutWithImage; };
И вот тут и кроется проблема, в примере this.getData().geoObject.getMap(); возвращает объект карты, а у меня если вызывать в функции шаблона метки - undefined. element доступен, меняет класс, меняет стиль ширины, но в пределах функции, на самом деле на карте не меняется ничего. Воспрос - как заставить карту увидеть эти изменения?
UPD: заставил карту менять класс точки https://jsfiddle.net/yus7z8a0/ но не меняется форма, если не перерендерится тайл. А rebuild принудительный приведет к бесконечной перезагрузке.