์ด ์๋ต ํค๋๋ htmx์ ์๋ต ๋ด์์ ๋์ ์์์ ํด๋ผ์ด์ธํธ ์ธก ๋์์ ํธ๋ฆฌ๊ฑฐํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋จ์ผ ์ด๋ฒคํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๊ฑฐ๋ ์ํ๋ ๋งํผ ๊ณ ์ ํ ์ด๋ฆ์ ์ด๋ฒคํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํ ์ ์์ต๋๋ค.
ํค๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
HX-Trigger
- ์๋ต์ ๋ฐ์๋ง์ ์ด๋ฒคํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค.HX-Trigger-After-Settle
- ์ ๋ฆฌ ๋จ๊ณ ํ์ ์ด๋ฒคํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค.HX-Trigger-After-Swap
- ๊ต์ฒด ๋จ๊ณ ํ์ ์ด๋ฒคํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค.์ถ๊ฐ ์ธ๋ถ ์ ๋ณด ์์ด ๋จ์ผ ์ด๋ฒคํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ ค๋ฉด ํค๋์ ์ด๋ฒคํธ ์ด๋ฆ์ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ๋จํ ๋ณด๋ผ ์ ์์ต๋๋ค:
HX-Trigger: myEvent
์ด๊ฒ์ triggering ์์์์ myEvent
๋ฅผ ํธ๋ฆฌ๊ฑฐํ๊ณ body
๋ก ๋ฒ๋ธ๋ง๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ด ์ด ์ด๋ฒคํธ๋ฅผ ๋ค์ ์ ์์ต๋๋ค:
document.body.addEventListener("myEvent", function(evt){
alert("myEvent was triggered!");
})
๋๋ JS ์ฝ๋๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ผ๋ถ ์์๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ ค๋ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์์ต๋๋ค:
<!-- ์ด๋ฒคํธ๊ฐ <body>๋ก ๋ฒ๋ธ๋ง๋๋ฏ๋ก, ์๋์ `from:body` ์์ ์๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค -->
<div hx-trigger="myEvent from:body" hx-get="/example"></div>
์ด๋ฒคํธ์ ํจ๊ป ์ธ๋ถ ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ ค๋ฉด ํธ๋ฆฌ๊ฑฐ์ ๊ฐ์ JSON์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค:
HX-Trigger: {"showMessage":"Here Is A Message"}
์ด ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ ค๋ฉด ๋ค์ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค:
document.body.addEventListener("showMessage", function(evt){
alert(evt.detail.value);
})
๋ฉ์์ง์ ๊ฐ์ด detail.value
์ฌ๋กฏ์ ๋ค์ด๊ฐ ๊ฒ์ ์ฃผ๋ชฉํ์ญ์์ค. ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ค๋ฉด JSON ๊ฐ์ฒด์ ์ค๋ฅธ์ชฝ์ ์ค์ฒฉ๋ JSON ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค:
HX-Trigger: {"showMessage":{"level" : "info", "message" : "Here Is A Message"}}
์ด ์ด๋ฒคํธ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ฒ๋ฆฌํฉ๋๋ค:
document.body.addEventListener("showMessage", function(evt){
if(evt.detail.level === "info"){
alert(evt.detail.message);
}
})
์ค๋ฅธ์ชฝ์ JSON ๊ฐ์ฒด์ ๊ฐ ์์ฑ์ ์ด๋ฒคํธ์ ์ธ๋ถ ์ ๋ณด ๊ฐ์ฒด์ ๋ณต์ฌ๋ฉ๋๋ค.
์ฌ๋ฌ ์ด๋ฒคํธ๋ฅผ ํธ์ถํ๋ ค๋ฉด ์ต์์ JSON ๊ฐ์ฒด์ ์ถ๊ฐ ์์ฑ์ ๊ฐ๋จํ ์ถ๊ฐํ ์ ์์ต๋๋ค:
HX-Trigger: {"event1":"A message", "event2":"Another message"}
์ถ๊ฐ ์ธ๋ถ ์ ๋ณด ์์ด ์ฌ๋ฌ ์ด๋ฒคํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ ค๋ฉด ์ด๋ฒคํธ ์ด๋ฆ์ ์ผํ๋ก ๊ตฌ๋ถํ์ฌ ๋ณด๋ผ ์๋ ์์ต๋๋ค:
HX-Trigger: event1, event2
์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ผ๋ฐ htmx ์๋ต์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๋ ๋ง์ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค.