usando el atributo data- * con thymeleaf


125

¿Puedo establecer el atributo data- * con thymeleaf?

Como entendí de la documentación de thymeleaf intenté:

<div th:data-el_id="${element.getId()}"> <!-- doesn't work -->

<div data-th-el_id="${element.getId()}"> <!-- doesn't work -->

77
Este fue un error corregido para Thymeleaf 3.0 . Esta pregunta solo es relevante para la versión pre 3.0. Para los más nuevos th:data-el_idfuncionará.
GabiM

Respuestas:


219

Sí, th:attrpara rescatar la documentación de Thymeleaf: establecer valores de atributos .

Para su escenario, esto debería hacer el trabajo:

<div th:attr="data-el_id=${element.getId()}">

Las reglas XML no le permiten establecer un atributo dos veces en una etiqueta, por lo que no puede tener más de uno th:attren el mismo elemento.

Nota: Si desea más de un atributo, separe los diferentes atributos por coma:

<div th:attr="data-id=${element.getId()},data-name=${element.getN‌​ame()}"> 

54
Solo una nota para futuros lectores, no puede tener más de un th: attr en el mismo elemento, así que solo use uno y separe los diferentes atributos por coma:th:attr="data-id=${element.getId()},data-name=${element.getName()}"
AntonioOtero

55
Si necesita incluir una variable como parte de una cadena, debe hacer esto:th:attr="data-id='some-text'+${element.getId()}+'some-other-text',data-name=${element.getName()}"
kabadisha

1
El comentario de @AntonioOtero debería ser parte de la respuesta.
Don Cheadle

Deseo que el procesamiento de atributos no se limite a ciertos atributos, sino que se maneje en general. ¿Alguien ha escuchado que será característica? (Bueno, la culpa es mía, todavía no revisé la versión 3 ;-)
Dirk Schumacher


7

Con Thymeleaf 3.0 existe el Procesador de atributos por defecto que se puede usar para cualquier tipo de atributos personalizados, por ejemplo , se th:data-el_id=""convierte data-el_id="", th:ng-app=""se convierte , ng-app=""etc. Ya no es necesario el querido dialecto de atributo de datos.

Esta solución la prefiero, si quiero usar json como valor, en lugar de:

th:attr="data-foobar='{&quot;foo&quot:'+${bar}+'}'"

Puede usar (en combinación con la sustitución literal ):

th:data-foobar='|{"foo":${bar}}|'

Actualización: si no le gusta el thespacio de nombres, también puede usar atributos amigables HTML5 y nombres de elementos como data-th-data-foobar="".

Si alguien está interesado, las pruebas de motor de plantilla relacionadas se pueden encontrar aquí: Pruebas para el procesador de atributos predeterminado

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.