[javascript] SlickGrid의 툴바 커스터마이징

SlickGrid은 JavaScript로 구현된 강력한 그리드 컴포넌트입니다. 통합된 툴바는 사용자가 그리드를 조작하고 필터를 적용하는 등의 작업을 수행할 수 있도록 도와줍니다. 이 기능을 보다 더 향상시키기 위해 SlickGrid의 툴바를 커스터마이징하는 방법에 대해 알아보겠습니다.

1. 툴바 추가

SlickGrid의 툴바를 커스터마이징하기 위해 먼저 그리드에 툴바를 추가해야 합니다. 다음은 SlickGrid 인스턴스를 생성하고 기본적인 설정을 하는 예제입니다:

var options = {
  enableCellNavigation: true,
  enableColumnReorder: false,
  headerRowHeight: 30,
  rowHeight: 30
};

var columns = [
  { id: "id", name: "ID", field: "id" },
  { id: "name", name: "이름", field: "name" },
  { id: "age", name: "나이", field: "age" },
];

var data = [
  { id: 1, name: "홍길동", age: 25 },
  { id: 2, name: "김철수", age: 30 },
  { id: 3, name: "이영희", age: 28 },
];

var grid = new Slick.Grid("#myGrid", data, columns, options);

위 예제에서는 #myGrid 요소에 그리드를 렌더링하고, 데이터와 컬럼 정의를 설정하였습니다.

2. 툴바 커스터마이징

SlickGrid의 툴바를 커스터마이징하기 위해서는 slick.core.js 파일에 정의된 Slick.Controls.Toolbar 클래스의 인스턴스를 생성하고 원하는 커스텀 버튼을 추가해야 합니다.

var toolbar = new Slick.Controls.Toolbar(grid, document.querySelector('.slick-header-right'));
toolbar.addButton("btn-id", "버튼", function(e) {
  // 버튼 클릭 시 동작할 코드 작성
});

위 예제에서는 Slick.Controls.Toolbar 클래스의 인스턴스를 생성하고, .slick-header-right 클래스를 가진 요소에 툴바를 추가하였습니다. addButton() 메서드를 사용하여 버튼을 추가하고, 클릭 이벤트에 대한 동작을 정의할 수 있습니다.

3. 커스텀 버튼에 대한 동작 정의

추가한 커스텀 버튼에 대한 동작을 정의하기 위해서는 addButton() 메서드의 콜백 함수를 구현해야 합니다. 예를 들어, 버튼을 클릭할 때 선택된 행의 데이터를 삭제하는 코드를 작성해보겠습니다.

toolbar.addButton("delete-btn", "삭제", function(e) {
  var selectedRows = grid.getSelectedRows();
  for (var i = 0; i < selectedRows.length; i++) {
    // 선택된 행의 데이터 삭제
    var dataItem = grid.getDataItem(selectedRows[i]);
    data.splice(data.indexOf(dataItem), 1);
    grid.invalidateRow(selectedRows[i]);
  }
  grid.updateRowCount();
  grid.render();
});

위 예제에서는 getSelectedRows() 메서드를 사용하여 선택된 행의 인덱스를 가져온 다음, 해당 인덱스의 데이터를 삭제합니다. 그리드를 업데이트하고 재렌더링하여 변경된 데이터가 반영되도록 합니다.

4. 결론

SlickGrid의 툴바 커스터마이징을 통해 그리드를 보다 유연하게 조작할 수 있습니다. 커스텀 버튼을 추가하고 해당 버튼에 대한 동작을 정의하여 사용자 요구에 맞는 그리드 기능을 만들 수 있습니다.