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 %}.

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

Конструктор

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);
console.log(result.text);
// Выведет в консоль «Виктор».

2.

// Предположим, что у нас есть 3 группы пользователей и в зависимости от группы нужно вывести одно из приветствий.
var data = new ymaps.data.Manager({
    groups: {
        administrator: {
            id: 1,
            name: "администратор"
        },
        moderator: {
            id: 2,
            name: "модератор"
        },
        user: {
            id: 3,
            name: "пользователь"
        }
    },
    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);
// Выведет «Привет, модератор!» в консоль.

Методы

Имя Возвращает Описание
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);
    });