반응형
최근 넥사플랫폼을 버리고, tui-grid로 개발을 진행하고 있어 참고용으로 기록합니다.
그리드 header에 checkbox를 만들기 위해서는 render를 사용해야합니다.
class checkboxRenderer를 만들어서 모든 행 check / uncheck 기능까지 구현했습니다.
방법은 아래와 같습니다.
<html>
<head>
<link rel="stylesheet" href="https://uicdn.toast.com/tui-grid/latest/tui-grid.min.css"/>
<script src="https://uicdn.toast.com/tui-code-snippet/latest/tui-code-snippet.min.js"></script>
<script src="https://uicdn.toast.com/tui.dom/v3.0.0/tui-dom.min.js"></script>
<script src="https://uicdn.toast.com/tui-component-popup/v1.5.0/tui-component-popup.min.js"></script>
<script src="https://uicdn.toast.com/tui.time-picker/latest/tui-time-picker.min.js"></script>
<script src="https://uicdn.toast.com/tui-date-picker/latest/tui-date-picker.min.js"></script>
<script src="https://uicdn.toast.com/tui-color-picker/latest/tui-color-picker.min.js"></script>
<script src="https://uicdn.toast.com/tui-chart/latest/tui-chart.min.js"></script>
<script src="https://uicdn.toast.com/tui-grid/latest/tui-grid.min.js"></script>
</head>
<body>
<div id="grid"></div>
<script type="text/javascript">
class CheckboxRenderer {
constructor(props) {
const { grid, rowKey } = props;
const label = document.createElement('label');
label.className = 'checkbox tui-grid-row-header-checkbox';
label.setAttribute('for', String(rowKey));
const hiddenInput = document.createElement('input');
hiddenInput.className = 'hidden-input';
hiddenInput.id = String(rowKey);
const customInput = document.createElement('span');
customInput.className = 'custom-input';
label.appendChild(hiddenInput);
label.appendChild(customInput);
hiddenInput.type = 'checkbox';
label.addEventListener('click', (ev) => {
ev.preventDefault();
if (ev.shiftKey) {
grid[!hiddenInput.checked ? 'checkBetween' : 'uncheckBetween'](rowKey);
return;
}
grid[!hiddenInput.checked ? 'check' : 'uncheck'](rowKey);
});
this.el = label;
this.render(props);
}
getElement() {
return this.el;
}
render(props) {
const hiddenInput = this.el.querySelector('.hidden-input');
const checked = Boolean(props.value);
hiddenInput.checked = checked;
}
}
// Toast UI Grid 생성
const grid = new tui.Grid({
el: document.getElementById('grid'),
rowHeaders: [
{
type: 'checkbox',
header: `
<label for="all-checkbox" class="checkbox">
<input type="checkbox" id="all-checkbox" class="hidden-input" name="_checked" />
<span class="custom-input"></span>
</label>
`,
renderer: {
type: CheckboxRenderer
}
}
],
columns: [
{name: 'name', header: 'Name'},
{name: 'age', header: 'Age'},
{name: 'address', header: 'Address'}
],
data: [
{name: 'John Doe', age: 30, address: 'New York'},
{name: 'Jane Doe', age: 25, address: 'San Francisco'},
{name: 'Bob Smith', age: 50, address: 'Los Angeles'}
]
});
</script>
</body>
</html>
반응형
'웹 디자인 > JavaScript' 카테고리의 다른 글
자바스크립트 배열 내 모든 숫자의 합 구하기 (for, forEach, reduce) (0) | 2023.08.16 |
---|---|
Notepad++ 로 자바스크립트 실행해보기 (0) | 2023.06.13 |
자바스크립트 변수 선언 키워드 var let const 차이 (0) | 2023.02.11 |
자바스크립트 정규표현식(Regular Expression) 기초 패턴 정리 (0) | 2022.08.27 |
자바스크립트 문자열 공백 제거하는 방법 (trim, replace) (0) | 2022.08.26 |