μ΄ μμ λ νΈμ§ κ°λ₯ν ν μ΄λΈ νμ ꡬννλ λ°©λ²μ 보μ¬μ€λλ€. λ¨Όμ ν μ΄λΈ λ³Έλ¬Έμ μ΄ν΄λ³΄κ² μ΅λλ€:
<table class="table delete-row-example">
<thead>
<tr>
<th>Name</th>
<th>Email</th>
<th></th>
</tr>
</thead>
<tbody hx-target="closest tr" hx-swap="outerHTML">
...
</tbody>
</table>
μ΄ μ½λλ ν μ΄λΈ λ΄μμ λ°μνλ μμ²μ΄ νΈλ¦¬κ±°λ κ°μ₯ κ°κΉμ΄ νμ λμμΌλ‘ νμ¬ ν΄λΉ ν μ 체λ₯Ό κ΅μ²΄νλλ‘ μ€μ ν©λλ€.
λ€μμ κ° νμ λν HTML μ½λμ λλ€:
<tr>
<td>${contact.name}</td>
<td>${contact.email}</td>
<td>
<button class="btn danger"
hx-get="/contact/${contact.id}/edit"
hx-trigger="edit"
onClick="let editing = document.querySelector('.editing')
if(editing) {
Swal.fire({title: 'Already Editing',
showCancelButton: true,
confirmButtonText: 'Yep, Edit This Row!',
text:'Hey! You are already editing a row! Do you want to cancel that edit and continue?'})
.then((result) => {
if(result.isConfirmed) {
htmx.trigger(editing, 'cancel')
htmx.trigger(this, 'edit')
}
})
} else {
htmx.trigger(this, 'edit')
}">
Edit
</button>
</td>
</tr>
μ¬κΈ°μλ μ‘°κΈ λ 볡μ‘ν λμμ μΆκ°νμ¬ ν λ²μ νλμ νλ§ νΈμ§ν μ μλλ‘ νκ³ μμ΅λλ€.
JavaScriptλ₯Ό μ¬μ©νμ¬ .editing
ν΄λμ€κ° μ μ©λ νμ΄ μλμ§ νμΈν ν, μ¬μ©μκ° λ€λ₯Έ νμ νΈμ§ν μ§ μ¬λΆλ₯Ό νμΈν©λλ€.
λ§μ½ νΈμ§μ κ³μνκ³ μΆλ€λ©΄, μ΄μ νμ cancel
μ΄λ²€νΈλ₯Ό νΈλ¦¬κ±°νμ¬ ν΄λΉ νμ΄ μλ μνλ‘ λμκ°κ² ν©λλ€.
κ·Έ ν, νμ¬ μμμ edit
μ΄λ²€νΈλ₯Ό νΈλ¦¬κ±°νμ¬ νμ νΈμ§ κ°λ₯ν λ²μ μ κ°μ Έμ€λ htmx μμ²μ νΈλ¦¬κ±°ν©λλ€.
μ¬λ¬ νμ λμμ νΈμ§νλ κ²μ΄ μκ΄μλ€λ©΄, JavaScriptμ 컀μ€ν
hx-trigger
λ₯Ό μλ΅νκ³ htmxμ κΈ°λ³Έ ν΄λ¦ νΈλ€λ§μ μ¬μ©ν΄λ λ©λλ€.
λλ, νΈμ§ λ²νΌμ ν΄λ¦ν λ μ 체 ν
μ΄λΈμ λμμΌλ‘ νλ λ°©μμΌλ‘ μνΈ λ°°νμ±μ ꡬνν μλ μμ΅λλ€.
μ¬κΈ°μλ htmxμ JavaScriptλ₯Ό ν΅ν©νμ¬ λ¬Έμ λ₯Ό ν΄κ²°νκ³ μλ²μμ μνΈμμ©μ μ΅μννλ λ°©λ²μ 보μ¬μ£Όκ³ μμΌλ©°, SweetAlert νμΈ λν μμλ₯Ό μ¬μ©νκ³ μμ΅λλ€.
λ§μ§λ§μΌλ‘, λ°μ΄ν°κ° νΈμ§ μ€μΌ λμ νμ λ€μκ³Ό κ°μ΅λλ€:
<tr hx-trigger='cancel' class='editing' hx-get="/contact/${contact.id}">
<td><input name='name' value='${contact.name}'></td>
<td><input name='email' value='${contact.email}'></td>
<td>
<button class="btn danger" hx-get="/contact/${contact.id}">
Cancel
</button>
<button class="btn danger" hx-put="/contact/${contact.id}" hx-include="closest tr">
Save
</button>
</td>
</tr>
μ¬κΈ°μ λͺ κ°μ§ μ€μν μ μ΄ μμ΅λλ€: 첫째, ν μμ²΄κ° cancel
μ΄λ²€νΈμ μλ΅νμ¬ νμ μ½κΈ° μ μ© μνλ‘ λλ릴 μ μμ΅λλ€.
μ·¨μ λ²νΌμ ν΅ν΄ νμ¬ νΈμ§μ μ·¨μν μ μμΌλ©°, μ μ₯ λ²νΌμ ν΅ν΄ PUT
μμ²μ λ³΄λ΄ μ°λ½μ²λ₯Ό μ
λ°μ΄νΈν μ μμ΅λλ€.
λν hx-include
λ₯Ό μ¬μ©νμ¬ κ°μ₯ κ°κΉμ΄ νμ μλ λͺ¨λ μ
λ ₯μ ν¬ν¨ν©λλ€.
HTMLμ μ μ½μΌλ‘ μΈν΄ ν
μ΄λΈ ν λ΄λΆμ form
μ μ§μ λ£μ μ μμΌλ―λ‘ μ΄λ₯Ό ν΅ν΄ μ²λ¦¬κ° μ’ λ μμν΄μ§λλ€.