В последней версии была реализована функция автообновления правой части балуна. То есть вам нужно по клику обновлять соответствующие поля данных у геообъекта, и правая часть сама перестроится.
А если используется собственный макет для балуна кластера(для правой его части)?
т.е. я определил свой clusterBalloonMainContentLayout у кластера, в макете в build заполняю содержимое балуна взависимости от активной метки в кластере. При клике слева на список объектов кластера функция buid не вызывается.
Вы можете записывать данные для метки в ее properties. В момент изменения значения этого поля произойдет событие 'change'. Вы можете слушать это событие на properties метки в макете clusterBalloonMainContentLayout и обновлять содержимое правой части.
а почему не срабатывает buid у clusterBalloonMainContentLayout по клику по меткам в левой части? нужно перестраивать правую часть самому? ок, как отследить клик по меткам слева?
При клике на пункте из списка у кластера обновляется значение поля cluster.state.get('activeObject'). Правая часть балуна ловит событие change на поле state кластера и обновляет содержимое. Также слушаются изменения на поле properties активной метки (выбранной в текущий момент), чтобы балун перестраивался при изменении данных метки.
Если вы пишете свой макет, то вам нужно будет реализовать какую-то часть из вышеописанной логики по аналогии со стандартным балуном кластера.
Марина, спасибо есть еще вопрос, допустим я создал clusterer, добавил в него объекты, добавил на карту var clusterer = new ymaps.Clusterer({}); clusterer.add(myGeoObjects); map.geoObjects.add(clusterer); Как подписаться на событие change? такой способ не проходит clusterer.state.events.add('change', function () { alert('change'); }); а в buid получается this.getData().state.events.add('change', function () { alert('change'); }); т.е. это можно делать только в buid'e?
function onClusterOpen(e) { e.get('target').state.events.remove('change'); e.get('target').state.events.add('change', onStateChange); }
//клик по меткам слева
function onStateChange(e) { var state = e.get('target'); var active = e.get('target').get('activeObject');
}
итак, в функции onStateChange нужно вызвать метод buid макета балуна(т.е. перестроить его содержимое), который я определил ранее. Как я могу это сделать?
В версии 2.0.18 логика построения балуна кластера была немного изменена в пользу удобной кастомизации макета. Поэтому пример из песочницы не работает на версии 2.0-stable. Пример работает в версиях, начиная с 2.0.18 и старше.
Заработало, правда наблюдается странность. Вместо того чтобы затирать справа, он новый контент добавляет снизу ... подскажите куда посмотреть можно, чтобы понять в чем дело ?