thymeleafでdata- *属性を使用する


125

thymeleafでdata- *属性を設定できますか?

私はthymeleafのドキュメントから理解したように、私は試しました:

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

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

7
これはバグであり、Thymeleaf 3.0修正されました。この質問は、3.0以前のバージョンにのみ関連します。新しいもののためth:data-el_idに働くでしょう。
GabiM 2018年

回答:


219

はい、Thymeleafのドキュメントをth:attr救うために-属性値の設定

あなたのシナリオでは、これは仕事をするはずです:

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

XMLルールでは、タグで属性を2回設定することはできませんth:attr。そのため、同じ要素に複数の属性を含めることはできません。

注:複数の属性が必要な場合は、異なる属性をコンマで区切ります。

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

54
同じ要素でattrはそう一つだけを使用し、カンマで異なる属性を区切る::ちょうど将来の読者のためのノートでは、あなたが複数の目を持つことはできませんth:attr="data-id=${element.getId()},data-name=${element.getName()}"
AntonioOtero

5
あなたは、文字列の一部として変数を含める必要がある場合は、これを実行する必要がありますth:attr="data-id='some-text'+${element.getId()}+'some-other-text',data-name=${element.getName()}"
kabadisha

1
@AntonioOteroのコメントは回答の一部である必要があります。
Don Cheadle

属性処理が特定の属性に制限されず、一般的に処理されることを望みます。それが機能になると誰か聞いたことがありますか?(私に責任がある、私はまだバージョン3をチェックしなかった;-)
Dirk Schumacher


7

Thymeleaf 3.0には、任意の種類のカスタム属性(例えば、になる、になるなど)に使用できるデフォルト属性プロセッサがあります。最愛のデータ属性の方言はもう必要ありません。th:data-el_id=""data-el_id=""th:ng-app=""ng-app=""

このソリューションでは、値としてjsonを使用する場合は、次の代わりに使用します

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

リテラル置換と組み合わせて)使用できます:

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

更新:th名前空間が気に入らない場合は、HTML5フレンドリーな属性とのような要素名を使用することもできますdata-th-data-foobar=""

誰かが興味を持っている場合は、関連するテンプレートエンジンテストをここで見つけることができます:デフォルトの属性プロセッサのテスト

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.