Uwaga dla przyszłych czytelników, nie możesz mieć więcej niż jednego th: attr w tym samym elemencie, więc użyj jednego i oddziel poszczególne atrybuty przecinkiem:th:attr="data-id=${element.getId()},data-name=${element.getName()}"
AntonioOtero
5
Jeśli chcesz dołączyć zmienną jako część łańcucha, musisz to zrobić:th:attr="data-id='some-text'+${element.getId()}+'some-other-text',data-name=${element.getName()}"
kabadisha
1
Komentarz @AntonioOtero powinien być częścią odpowiedzi.
Don Cheadle
Chciałbym, żeby przetwarzanie atrybutów nie było ograniczone do pewnych atrybutów, ale raczej było ogólnie obsługiwane. Czy ktoś słyszał, że będzie to funkcja? (Cóż, winę na mnie, jeszcze nie sprawdzałem wersji 3 ;-)
W Thymeleaf 3.0 istnieje domyślny procesor atrybutów, który może być użyty do dowolnego rodzaju niestandardowych atrybutów, np. th:data-el_id=""Staje się data-el_id="", th:ng-app=""staje się ng-app=""i tak dalej. Nie ma już potrzeby stosowania ulubionego dialektu atrybutów danych.
To rozwiązanie preferuję, jeśli chcę użyć json jako wartości, zamiast:
th:data-el_id
będzie działać.Odpowiedzi:
Tak,
th:attr
na ratunek Dokumentacja Thymeleaf - Ustawianie wartości atrybutów .W Twoim scenariuszu powinno to wystarczyć:
Reguły XML nie pozwalają na dwukrotne ustawienie atrybutu w tagu, więc nie możesz mieć więcej niż jednego
th:attr
w tym samym elemencie.Uwaga: jeśli chcesz mieć więcej niż jeden atrybut, oddziel poszczególne atrybuty przecinkiem:
źródło
th:attr="data-id=${element.getId()},data-name=${element.getName()}"
th:attr="data-id='some-text'+${element.getId()}+'some-other-text',data-name=${element.getName()}"
Lub możesz użyć tego dialektu Thymeleaf https://github.com/mxab/thymeleaf-extras-data-attribute i będziesz w stanie to zrobić
źródło
W Thymeleaf 3.0 istnieje domyślny procesor atrybutów, który może być użyty do dowolnego rodzaju niestandardowych atrybutów, np.
th:data-el_id=""
Staje siędata-el_id=""
,th:ng-app=""
staje sięng-app=""
i tak dalej. Nie ma już potrzeby stosowania ulubionego dialektu atrybutów danych.To rozwiązanie preferuję, jeśli chcę użyć json jako wartości, zamiast:
Możesz użyć (w połączeniu z podstawieniem dosłownym ):
Aktualizacja: Jeśli nie podoba Ci się
th
przestrzeń nazw, możesz również użyć przyjaznych atrybutów HTML5 i nazw elementów, takich jakdata-th-data-foobar=""
.Jeśli ktoś jest zainteresowany, powiązane testy silnika szablonów można znaleźć tutaj: Testy dla domyślnego procesora atrybutów
źródło