ฉันสามารถตั้งค่า data- * attribute ด้วย thymeleaf ได้หรือไม่?
ตามที่ฉันเข้าใจจากเอกสารใบโหระพาฉันพยายาม:
<div th:data-el_id="${element.getId()}"> <!-- doesn't work -->
<div data-th-el_id="${element.getId()}"> <!-- doesn't work -->
ฉันสามารถตั้งค่า data- * attribute ด้วย thymeleaf ได้หรือไม่?
ตามที่ฉันเข้าใจจากเอกสารใบโหระพาฉันพยายาม:
<div th:data-el_id="${element.getId()}"> <!-- doesn't work -->
<div data-th-el_id="${element.getId()}"> <!-- doesn't work -->
คำตอบ:
ใช่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()}">
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()}"
หรือคุณสามารถใช้ภาษาไทม์ลีฟhttps://github.com/mxab/thymeleaf-extras-data-attributeและคุณจะสามารถทำได้
<div data:el_id="${element.getId()}">
ด้วย Thymeleaf 3.0 มีหน่วยประมวลผลแอตทริบิวต์เริ่มต้นซึ่งสามารถใช้สำหรับชนิดของแอตทริบิวต์ที่กำหนดเองใด ๆ เช่นth:data-el_id=""
กลายเป็นdata-el_id=""
, th:ng-app=""
กลายเป็นng-app=""
และอื่น ๆ ไม่จำเป็นต้องใช้ภาษาแอตทริบิวต์ข้อมูลอันเป็นที่รักอีกต่อไป
วิธีนี้ฉันชอบถ้าฉันต้องการใช้ jsonเป็นค่าแทนที่จะเป็น:
th:attr="data-foobar='{"foo":'+${bar}+'}'"
คุณสามารถใช้ (ร่วมกับการแทนที่ตามตัวอักษร ):
th:data-foobar='|{"foo":${bar}}|'
ปรับปรุง:ถ้าคุณทำไม่ได้เช่นth
namespace คุณยังสามารถใช้HTML5 มิตรแอตทริบิวต์และองค์ประกอบชื่อdata-th-data-foobar=""
เหมือน
หากมีผู้สนใจสามารถดูการทดสอบเอนจินเทมเพลตที่เกี่ยวข้องได้ที่นี่: การทดสอบสำหรับตัวประมวลผลแอตทริบิวต์เริ่มต้น
th:data-el_id
จะได้ผล