Клуб API Карт

Как вывести объект приходящий в конструктор ymaps.templateLayoutFactory.createClass?

light-exo
21 июня, 10:34

Пытаюсь сделать кастомный балун для кластера, но проблема в том, что туда ничего не приходит если брать пример из документации, при том, что для стандартных просто запихиваю в body и вывожу верстку, и всё работает. 

В частности:

var clusterContentLayout = ymaps.templateLayoutFactory.createClass([
        '<div class="proposal__item"> \
            <div class="balloon__overlay {{ properties.geoObjects[0].properties.load }}"></div> \
            <div class="MapBalloon_Header"> \
              <div class="MapBalloon_HeaderTitle"> {{ properties.geoObjects[0].properties.title }} </div> \
            </div> \
            <div class="MapBalloon_Body" style="height: auto"> \
              {% for geoObject in properties.geoObjects %} \
              <div class="MapBalloon_Item"> \
                <div class="MapBalloon_ItemImg" style="background-image: url({{  geoObject.properties.photo }})"> \
                  <a href="{{  geoObject.properties.url }}"> \
                    <img src="{{  geoObject.properties.photo }}" alt="{{  geoObject.properties.title }}" /> \
                  </a> \
                </div> \
                <div class="MapBalloon_ItemBody"> \
                  <div class="MapBalloon_ItemBodyType">{{  geoObject.properties.type }}</div> \
                  <div class="MapBalloon_ItemBodyInfo"> \
                    <a href="{{  geoObject.properties.url }}">{% if  geoObject.properties.rooms %} {{  geoObject.properties.rooms }}-к {% endif %}{{  geoObject.properties.type }} {% if  geoObject.properties.area %}{{  geoObject.properties.area }} м<sup>2</sup>{% endif %}{% if  geoObject.properties.area %} {{  geoObject.properties.floors }} эт.{% endif %}</a> \
                  </div> \
                  <div class="MapBalloon_ItemBodyPrice">{{  geoObject.properties.price }}<span class="roub-sign">&nbsp;{{  geoObject.properties.currency }}</span></div> \
                </div> \
              </div> \
              {% endfor %} \
            </div> \
          </div>'
      ].join(''));

Возможно, потому что у меня динамическая загрузка аяксом:

...
var objectState = objectManager.getObjectState(objectId);
              if (!objectState.isClustered) {
                object.properties.load = '';
                objectManager.objects.balloon.open(objectId);
              } else {
                objectManager.clusters.balloon.open(objectState.cluster.id);
              }
...
objectManager.objects.events.add('click', function (e) {
        e.preventDefault();
        var objectId = e.get('objectId');
        setBalloonData(objectId);
      });
      objectManager.clusters.events.add('click', function (e) {
        e.preventDefault();
        var objectId = e.get('objectId');
      });
      //Monitor cluster changes
      var activeObjectMonitor = new ymaps.Monitor(objectManager.clusters.state);
      activeObjectMonitor.add('activeObject', function () {
  			var objectId = activeObjectMonitor.get('activeObject').id;
        setBalloonData(objectId);
  		});

6 комментариев
Подписаться на комментарии к посту
В каждом посте на каждой странице пишу, чтобы собирали пример со своими данными на jsfiddle. Чтобы отвечать по существу надо запускать код на ваших данных и смотреть.
dimik,
да пожалуйста, только работать там ничего не будет... https://jsfiddle.net/tuLqptom/
а по существу было бы просто как логировать то, что приходит в фабрику эту, я же не прошу решения всех проблем, лишь наводку...да и не читаю я ваши кажые страницы и вообще не особо лезу сюда, пытаюсь сам, пока совсем в тупик не зайду
light-exo,
Посмотреть, что приходит в макет несложно.
В методе build, после вызова build у базового класса можно вызвать getData


var ClusterBalloonContentLayout = ymaps.templateLayoutFactory.createClass('...', {
  build: function () {
    ClusterBalloonContentLayout.superclass.build.call(this);
     console.log(this.getData());
  },
});
Обновлено 23 июня, 12:03
dimik,
да,спасибо, точно
light-exo,
кстати, лучше использовать макет для AJAX-загрузки данных объектов кластера. Этот вариант проще и в нем меньше костылей


http://jsfiddle.net/1dpotvy6/11/
dimik,
спасибо