매번 블로그에서 문장으로만 읽고 지나가다 보니 실제 코드에 전혀 적용을 못하여 직접 구현해 보았습니다.
간단한 ToDoList 예제입니다.
<div class="container">
<h1> 위임 패턴 예제</h1>
<form class="todo-form">
<input type="text" id="todoInput">
<button type="submit">추가</button>
</form>
<div class="todo-list">
<!--
<div class="todo">
<div class="todo-text">
<span>${todo}</span>
</div>
<div class="todo-state">
<div class="todo-button" data-action="onDone">done</div>
<div class="todo-button" data-action="onRemove">remove</div>
<div class="todo-button" data-action="onUpdate">update</div>
</div>
</div>
-->
</div>
</div>
import {todo} from '../data/todo.js';
import {todoTemplate} from '../template/todoTemplate.js';
export default class ToDoComponent {
constructor(elem) {
this._elem = elem;
}
onSave(text) {
const $todoList = document.querySelector('.todo-list');
$todoList.innerHTML = '';
todo.push({todo: text });
todo.map(x => {
$todoList.insertAdjacentHTML('afterbegin', todoTemplate(x));
});
}
onRemove() {
alert('removing');
}
onDone() {
alert('done!');
}
onUpdate() {
alert('updating');
}
onEmit() {
console.log('onEmit');
this._elem.addEventListener('click', (e) => {
const elemTarget = e.target;
if ( elemTarget && elemTarget.dataset.action === "onDone" ) {
this.onDone();
} else if ( elemTarget && elemTarget.dataset.action === "onRemove" ) {
this.onRemove();
} else if ( elemTarget && elemTarget.dataset.action === "onUpdate" ) {
this.onUpdate();
}
});
}
}
역시 갓갓......