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)
Параметры:
Параметр |
Значение по умолчанию |
Описание |
|
— |
Тип: 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>');
Методы
Имя |
Возвращает |
Описание |
Object |
Возвращает объект со следующими полями:
|
Описание методов
build
{Object} build(data)
Возвращает объект, содержащий следующие поля:
- {String} text — результат выполнения шаблонизации;
- {Object[]} renderedValues — массив c использованными данными из менеджера.
Параметры:
Параметр |
Значение по умолчанию |
Описание |
|
— |
Тип: 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);
});
Обязательный параметр.