hx-sync
hx-sync
μμ±μ μ¬λ¬ μμ κ°μ AJAX μμ²μ λκΈ°νν μ μκ² ν©λλ€.
hx-sync
μμ±μ λκΈ°νν μμλ₯Ό λνλ΄λ CSS μ νμλ‘ κ΅¬μ±λλ©°, μ νμ μΌλ‘ μ½λ‘ λ€μ λκΈ°ν μ λ΅μ μ§μ ν μ μμ΅λλ€. μ¬μ© κ°λ₯ν μ λ΅μ λ€μκ³Ό κ°μ΅λλ€:
drop
- κΈ°μ‘΄ μμ²μ΄ μ§ν μ€μΈ κ²½μ° μ΄ μμ²μ 무μν©λλ€ (κΈ°λ³Έκ°)abort
- κΈ°μ‘΄ μμ²μ΄ μ§ν μ€μΈ κ²½μ° μ΄ μμ²μ 무μνλ©°, κ·Έλ μ§ μμ κ²½μ° μ΄ μμ²μ΄ μ§ν μ€μΌ λ λ€λ₯Έ μμ²μ΄ λ°μνλ©΄ μ΄ μμ²μ μ€λ¨ν©λλ€replace
- νμ¬ μμ²μ΄ μλ€λ©΄ μ€λ¨νκ³ μ΄ μμ²μΌλ‘ κ΅μ²΄ν©λλ€queue
- μ΄ μμ²μ μ§μ λ μμμ κ΄λ ¨λ μμ² λκΈ°μ΄μ λ£μ΅λλ€queue
μμ μλ λκΈ° λ°©λ²μ μ νν μ§μ νλ μΆκ° μΈμλ₯Ό κ°μ§ μ μμ΅λλ€:
queue first
- μμ²μ΄ μ§ν μ€μΌ λ λνλλ 첫 λ²μ§Έ μμ²μ λκΈ°μ΄μ λ£μ΅λλ€queue last
- μμ²μ΄ μ§ν μ€μΌ λ λνλλ λ§μ§λ§ μμ²μ λκΈ°μ΄μ λ£μ΅λλ€queue all
- μμ²μ΄ μ§ν μ€μΌ λ λνλλ λͺ¨λ μμ²μ λκΈ°μ΄μ λ£μ΅λλ€hx-sync
λ μμλλ©° λΆλͺ¨ μμμ λ°°μΉν μ μμ΅λλ€μ΄ μμ λ formμ μ μΆ μμ²κ³Ό κ°λ³ μ
λ ₯ κ²μ¦ μμ² κ°μ κ²½μ 쑰건μ ν΄κ²°ν©λλ€.
hx-sync
λ₯Ό μ¬μ©νμ§ μμΌλ©΄ inputμ μ±μ°κ³ formμ μ¦μ μ μΆν λ /validate
μ /store
λ‘ λ κ°μ λ³λ ¬ μμ²μ΄ νΈλ¦¬κ±°λ©λλ€.
inputμ hx-sync="closest form:abort"
λ₯Ό μ¬μ©νλ©΄ formμμ μμ²μ κ°μνκ³ , form μμ²μ΄ μ‘΄μ¬νκ±°λ input μμ²μ΄ μ§ν μ€μΌ λ μμλλ©΄ input μμ²μ μ€λ¨ν©λλ€.
<form hx-post="/store">
<input id="title" name="title" type="text"
hx-post="/validate"
hx-trigger="change"
hx-sync="closest form:abort">
<button type="submit">Submit</button>
</form>
κ²μ¦ μμ²μ μ μΆ μμ²λ³΄λ€ μ°μ μνλ €λ©΄ drop
μ λ΅μ μ¬μ©ν μ μμ΅λλ€. μ΄ μμ λ κ²μ¦ μμ²μ΄ μ§ν μ€μΈ κ²½μ° formμ μ μΆν μ μλλ‘ κ²μ¦ μμ²μ μ μΆ μμ²λ³΄λ€ μ°μ μν©λλ€.
<form hx-post="/store">
<input id="title" name="title" type="text"
hx-post="/validate"
hx-trigger="change"
hx-sync="closest form:drop"
>
<button type="submit">Submit</button>
</form>
λ§μ μ
λ ₯μ ν¬ν¨νλ formμ λ€λ£° λ, form νκ·Έμ hx-sync replace
μ λ΅μ μ¬μ©νμ¬ μ μΆ μμ²μ λͺ¨λ μ
λ ₯ κ²μ¦ μμ²λ³΄λ€ μ°μ μν μ μμ΅λλ€.
μ΄λ μ§ν μ€μΈ λͺ¨λ κ²μ¦ μμ²μ μ·¨μνκ³ hx-post="/store"
μμ²λ§ μνν©λλ€. μ μΆ μμ²μ μ€λ¨νκ³ κΈ°μ‘΄ κ²μ¦ μμ²μ μ°μ μνλ €λ©΄ form νκ·Έμ hx-sync="this:abort"
μ λ΅μ μ¬μ©ν μ μμ΅λλ€.
<form hx-post="/store" hx-sync="this:replace">
<input id="title" name="title" type="text" hx-post="/validate" hx-trigger="change" />
<button type="submit">Submit</button>
</form>
νμ± κ²μ κΈ°λ₯μ ꡬνν λ hx-trigger
μμ±μ delay
μμ μλ₯Ό μ¬μ©νμ¬ μ¬μ©μμ μ
λ ₯μ debounceνκ³ μ¬μ©μκ° μ
λ ₯νλ λμ μ¬λ¬ μμ²μ νμ§ μλλ‘ ν μ μμ΅λλ€.
κ·Έλ¬λ ν λ² μμ²μ΄ μ΄λ£¨μ΄μ§λ©΄ μ΄μ μμ²μ΄ μλ£λμ§ μμ μνμμ μ¬μ©μκ° λ€μ μ
λ ₯μ μμνλ©΄ μ μμ²μ΄ μμλ©λλ€. μ΄ μμ μμλ μ§ν μ€μΈ μμ²μ μ·¨μνκ³ λ§μ§λ§ μμ²λ§ μ¬μ©ν©λλ€.
κ²μ μ
λ ₯μ΄ λμμ ν¬ν¨λ κ²½μ°, μ΄λ κ² hx-sync
λ₯Ό μ¬μ©νλ©΄ μ¬μ©μκ° μ
λ ₯νλ λμ μ
λ ₯μ΄ κ΅μ²΄λ κ°λ₯μ±μ μ€μ΄λ λ° λμμ΄ λ©λλ€.
<input type="search"
hx-get="/search"
hx-trigger="keyup changed delay:500ms, search"
hx-target="#search-results"
hx-sync="this:replace">