Клуб API Карт

Умные шаблоны содержания балуна

CTRT
28 января 2010, 21:16

Есть шаблон с определенными поями

 

<repr:Template gml:id="companyTemplate">
   <repr:text>
    <![CDATA[
    <div>
    <h3>$[name]</h3>
    <b>Время работы</b>: $[metaDataProperty.AnyMetaData.open]<br>
    <b>Телефон</b>: $[metaDataProperty.AnyMetaData.tel]<br>
    <b>Адрес сайта</b>: <a href="http://$[metaDataProperty.AnyMetaData.url]" terget="_blank">$[metaDataProperty.AnyMetaData.url]</a><br>
    <p>$[description]</p></div> ]]>
   </repr:text>
  </repr:Template>

 

Как сделать так, чтобы если какое-то поле не указано, не появлялась вся строка.

например. если нет адреса сайта, чтобы вся строка      <b>Адрес сайта</b>: <a href="http://$[metaDataProperty.AnyMetaData.url]" terget="_blank">$[metaDataProperty.AnyMetaData.url]</a><br>

не показывалась, чтобы небыло в балуне "Адрес Сайта" и дальше пусто?

6 комментариев
Подписаться на комментарии к посту
Условная логика в шаблонах отсутствует, поэтому сделать так не получится.
Можно сделать такой шаблон:

  
   
  
А в metaDataProperty.AnyMetaData.url написать следующее:
Адрес сайта: http://mysite.ru/" terget="_blank">

Или же после загрузки YMapsML сделать дополнительные проверки с помощью JavaScript.

тогда уж проще поморочиться с css

Не пойдет. Мы же не можем вставлять HTML-разметку в Metadata/*, только в description, вроде бы?
Зачем кстати она экранируется? Неудобно, приходится все запихивать в description...
Как уже написал выше Саша условной логики в шаблонах нет. Но мы думаем о разрешении таких  ситуаций как ваша. Пока не придумали хорошего и красивого способа реализовать условия без превращения простых вставок в "язык" шаблонизации. Может вы предложите свой вариант?
Не думаю, что возможно реализовать условную логику без превращения простых вставок в "язык" шаблонизации. Возможно, стоит предусмотреть задание в стиле поля-указателя на callback-функцию, выполняющую верстку с использованием данных объекта контекста?
В javascript весь шаблон есть один метод build, который возвращает объект с интерфейсом ILayout. Это я к тому, что для создания собтвенного обработчика, уже сейчас есть все интерфейсы.

А вот в YMapsML подобной возможности нет как класса, вот он камень предкновения.