#html #thymeleaf
#HTML #thymeleaf
Вопрос:
Могу ли я установить атрибут data- * с помощью thymeleaf?
Как я понял из документации thymeleaf, я попытался:
<div th:data-el_id="${element.getId()}"> <!-- doesn't work -->
<div data-th-el_id="${element.getId()}"> <!-- doesn't work -->
Комментарии:
1. Это была ошибка, исправленная для Thymeleaf 3.0 . Этот вопрос актуален только для версии до 3.0. Для более новых
th:data-el_id
будет работать.
Ответ №1:
Да, th:attr
на помощь приходит документация Thymeleaf — настройка значений атрибутов.
Для вашего сценария это должно выполнить эту работу:
<div th:attr="data-el_id=${element.getId()}">
Правила XML не позволяют дважды задавать атрибут в теге, поэтому в одном элементе не может быть более одного th:attr
атрибута.
Примечание: Если вам нужно больше одного атрибута, разделите разные атрибуты запятой:
<div th:attr="data-id=${element.getId()},data-name=${element.getName()}">
Комментарии:
1. Просто примечание для будущих читателей: у вас не может быть более одного th: attr в одном элементе, поэтому просто используйте один и разделяйте разные атрибуты запятой:
th:attr="data-id=${element.getId()},data-name=${element.getName()}"
2. Если вам нужно включить переменную как часть строки, вам нужно сделать это:
th:attr="data-id='some-text' ${element.getId()} 'some-other-text',data-name=${element.getName()}"
3. комментарий @AntonioOtero должен быть частью ответа.
4. Я бы хотел, чтобы обработка атрибутов не ограничивалась определенными атрибутами, а скорее обрабатывалась в целом. Кто-нибудь слышал, что это будет функция? (Ну, вините меня, я еще не проверял версию 3 😉
Ответ №2:
Или вы можете использовать этот диалект Thymeleaf https://github.com/mxab/thymeleaf-extras-data-attribute и вы сможете это сделать
<div data:el_id="${element.getId()}">
Ответ №3:
В Thymeleaf 3.0 есть процессор атрибутов по умолчанию, который можно использовать для любых пользовательских атрибутов, например th:data-el_id=""
, becomes data-el_id=""
, th:ng-app=""
becomes ng-app=""
и так далее. Больше нет необходимости в любимом диалекте атрибутов данных.
Это решение я предпочитаю, если я хочу использовать json в качестве значения, а не:
th:attr="data-foobar='{amp;quot;fooamp;quot:' ${bar} '}'"
Вы можете использовать (в сочетании с буквальной подстановкой):
th:data-foobar='|{"foo":${bar}}|'
Обновление: Если вам не нравится th
пространство имен, вы также можете использовать понятные для HTML5 имена атрибутов и элементов, например data-th-data-foobar=""
.
Если кому-то интересно, связанные тесты движка шаблонов можно найти здесь: Тесты для процессора атрибутов по умолчанию