Собственно говоря, сабж. Использую апи (упрощенно) таким образом:
let map = new ymaps.Map('map', { center: [55.751574, 37.573856], zoom: 10, controls: ['zoomControl'] }, { searchControlProvider: 'yandex#search' }); let defaultMargins = { search: { top: 0, left: 0, width: "100px", height: "50px" }, layers: { top: 0, left: 0, width: "380px", height: "100%", }, points: { top: 0, right: 0, width: "380px", height: "100%", } }; let margins = {}; let setMargins = function (panelStates) { "use strict"; let newMargins = Object.assign({}, defaultMargins); switch (panelStates.layers) { case 'open': break; case 'minimized': newMargins.layers.height = "120px"; break; case 'closed': newMargins.layers.height = "1%"; break; } switch (panelStates.points) { case 'open': break; case 'minimized': newMargins.points.height = "120px"; break; case 'closed': newMargins.points.height = "1%"; break; } Object.keys(defaultMargins).forEach((key) => { if (!margins[key]) { margins[key] = map.margin.addArea(newMargins[key]); } else { margins[key] = margins[key].setArea(newMargins[key]); } }); }; setMargins({ layers: "open", points: "open", }); let objectManager = new ymaps.ObjectManager({ clusterize: true, }); let points = [ ... ]; let collection = { "type": "FeatureCollection", "features": points.map((point) => ({ "type": "Feature", "id": point.point_id, "geometry": { "type": "Point", "coordinates": [Number(point.lat), Number(point.lon)] }, })), }; objectManager.add(collection); map.geoObjects.add(objectManager); setMargins({ layers: "closed", points: "open", });
После исполнения этого кода отступы должны измениться, но этого не происходит, getMargin возвращает одинаковые значения до и после исполнения последнего setMargins. Вопрос знатокам: это я дурак, или лыжи не едут?