Template

Шаблонизатор. В API Яндекс.Карт поддерживается базовый синтаксис языков шаблонов Twig/Django Templates. Поддерживаются следующие операции:

  • Подстановка значения — {{ field_name }}.
  • Если запрашиваемое поле данных отсутствует или имеет пустое значение, то можно предусмотреть стандартное значение — {{ field_name|default:default_value }}. Значением по умолчанию может быть число, строка (записывается в кавычках) или другое поле данных.
  • По умолчанию значение обрабатывается функцией escape для предотвращения XSS уязвимости. Для отмены поведения необходимо добавить фильтр "raw" filter - {{ field_name|default: default_value|raw }}.
  • С помощью template.filtersStorage можно создавать свои фильтры и использовать их аналогично описанным выше.
  • Для вставки подмакета необходимо использовать конструкцию {% include field_name_or_key %}. Шаблонизатор, встретив такую конструкцию, попытается использовать значение в поле как ключ вложенного макета.
  • Условие записывается в виде:

    {% if condition %} ... ... {% else %} ... {% endif %}, блоки else и elseif можно опустить. Внутри блоков if, else и elseif можно использовать любые конструкции языка шаблонов.

  • Для выполнения итерации по массиву или по объекту нужно использовать конструкцию for.

    {% for value in array_or_hash %} ... {% endfor %}. Внутри блока for можно использовать любые конструкции языка шаблонов.

  • Для получения номера итерации в массиве или имени поля в хеше нужно использовать конструкцию:

    {% for значение в массив_или_хеш %} ... {% endfor %}.

  • Вы можете добавить дополнительную проверку на опасные аттрибуты onload и onerror с помощью комментария sanitize в шаблоне. При наличии этого комментария шаблонизатор покажет ошибку если один из этих аттрибутов будет в шаблоне, в противном случае в будет warning в консоли.

Конструктор | Методы

Конструктор

Template(text)

Параметры:

Параметр Значение по умолчанию Описание
text *

Тип: String

Строка-шаблон.

* Обязательный параметр/опция.

Примеры:

1.

// Получим имя пользователя из менеджера данных data.Manager.
// Если имя не задано, то в результате получится строка «Незарегистрированный пользователь».
var data = new ymaps.data.Manager({
         user: {
             name: "Виктор",
             age: 25
         },
         home: [55.72725771214265, 37.640390506634006]
     }),
    var template = new ymaps.Template('{{ user.name |default: "Unregistered user"}}');
    var result = template.build(data);

var result = template.build(data);
console.log(result.text); // Выведет в консоль «Виктор».

2.

// Предположим, что у нас есть 3 группы пользователей, и нам нужно напечатать индивидуальное приветствие для каждой группы.
var data = new ymaps.data.Manager({
    groups: {
        administrator: {
            id: 1,
            name: "administrator"
        },
        moderator: {
            id: 2,
            name: "moderator"
        },
        user: {
            id: 3,
            name: "user"
        }
    },
    userGroupId: 2
});
var template = new ymaps.Template('Hi, \
    {% if (userGroupId == 1) %}{{ groups.administrator.name }}\
    {% elseif (userGroupId == 2) %}{{ groups.moderator.name }}\
    {% elseif (userGroupId == 3) %}{{ groups.user.name }}\
    {% else %}guest{% endif %}!'
);

var result = template.build(data);
console.log(result.text); // Выведет «Привет, модератор!» в консоль.

3.

// С использованием комментария sanitize 
var template = new ymaps.Template('<!--sanitize--><div>Привет!</div>');

Методы

Имя Возвращает Описание
build(data)

Object

Возвращает объект со следующими полями:
  • {String} text — результат выполнения шаблонизации;
  • {Object[]} renderedValues — массив c использованными данными из менеджера.

Описание методов

build

{Object} build(data)
Возвращает объект, содержащий следующие поля:
  • {String} text — результат выполнения шаблонизации;
  • {Object[]} renderedValues — массив c использованными данными из менеджера.

Параметры:

Параметр Значение по умолчанию Описание
data *

Тип: IDataManager

Менеджер данных.

* Обязательный параметр/опция.

Пример:

// Получим адрес дома из имеющихся координат и выведем по шаблону
// всех его жильцов в формате: «имя: возраст».
var data = new ymaps.data.Manager({
         users: [
             {name: "Виталий", age: 40},
             {name: "Георгий", age: 20}
         ],
         home: {
             coords: [55.736652, 37.620589],
             address: null
         }
     }),
     var template = new ymaps.Template('{{home.address}}: <ul>{% for user in users %}<li>{{user.name}}: {{user.age}}</li>{% endfor %}</ul>');

// Сделаем обратное геокодирование с помощью geocode.
ymaps.geocode(data.get('home.coords')).then(function (res) {
     var address = res.geoObjects.get(0).properties.get('name');
     // Установим в менеджер полученный адрес.
     data.set('home.address', address);

      // Соберём шаблон из имеющихся данных.
     var result = template.build(data);
      // Выведем результат в консоль.
     console.log(result.text);
});