HX-Trigger Response Headers

์ด ์‘๋‹ต ํ—ค๋”๋Š” htmx์˜ ์‘๋‹ต ๋‚ด์—์„œ ๋Œ€์ƒ ์š”์†Œ์— ํด๋ผ์ด์–ธํŠธ ์ธก ๋™์ž‘์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ผ ์ด๋ฒคํŠธ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๊ฑฐ๋‚˜ ์›ํ•˜๋Š” ๋งŒํผ ๊ณ ์œ ํ•œ ์ด๋ฆ„์˜ ์ด๋ฒคํŠธ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ—ค๋”๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

์ถ”๊ฐ€ ์„ธ๋ถ€ ์ •๋ณด ์—†์ด ๋‹จ์ผ ์ด๋ฒคํŠธ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๋ ค๋ฉด ํ—ค๋”์— ์ด๋ฒคํŠธ ์ด๋ฆ„์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ„๋‹จํžˆ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

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 ๊ฐ์ฒด์˜ ๊ฐ ์†์„ฑ์€ ์ด๋ฒคํŠธ์˜ ์„ธ๋ถ€ ์ •๋ณด ๊ฐ์ฒด์— ๋ณต์‚ฌ๋ฉ๋‹ˆ๋‹ค.

Multiple Triggers

์—ฌ๋Ÿฌ ์ด๋ฒคํŠธ๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๋ฉด ์ตœ์ƒ์œ„ JSON ๊ฐ์ฒด์— ์ถ”๊ฐ€ ์†์„ฑ์„ ๊ฐ„๋‹จํžˆ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

HX-Trigger: {"event1":"A message", "event2":"Another message"}

์ถ”๊ฐ€ ์„ธ๋ถ€ ์ •๋ณด ์—†์ด ์—ฌ๋Ÿฌ ์ด๋ฒคํŠธ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๋ ค๋ฉด ์ด๋ฒคํŠธ ์ด๋ฆ„์„ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋ณด๋‚ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค:

HX-Trigger: event1, event2

์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ผ๋ฐ˜ htmx ์‘๋‹ต์— ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋งŽ์€ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.