이전 버전에서의 마이그레이션
8.0 -> 9.0
v9.0 업데이트에서는 여러 가지 호환성 깨짐(breaking changes)이 도입되었습니다.
스킨이 CSS 변수로 전환됨
CSS 스킨(테마)이 완전히 재작업되어 이제 CSS 변수를 사용합니다. 컴포넌트의 HTML 구조와 CSS 클래스 이름은 대부분 변경되지 않았으나, 이전 버전의 Gantt용으로 작성된 CSS 스타일은 v9.0에서 의도한 대로 동작하지 않을 수 있습니다.
예를 들어, 다음과 같은 스타일은 작업의 우선순위에 따라 색상을 지정하는 데 사용되었습니다:
<style>
/* 테두리/진행률 색상 오버라이드를 위한 공통 스타일 */
.gantt_task_line{
border-color: rgba(0, 0, 0, 0.25);
}
.gantt_task_line .gantt_task_progress {
background-color: rgba(0, 0, 0, 0.25);
}
/* high */
.gantt_task_line.high {
background-color: #03A9F4;
}
.gantt_task_line.high .gantt_task_content {
color: #fff;
}
/* medium */
.gantt_task_line.medium {
background-color: #f57730;
}
.gantt_task_line.medium .gantt_task_content {
color: #fff;
}
/* low */
.gantt_task_line.low {
background-color: #e157de;
}
.gantt_task_line.low .gantt_task_content {
color: #fff;
}
</style>
v9.0부터는 아래와 같은 스타일로 동일한 효과를 얻을 수 있습니다:
<style>
/* high */
.gantt_task_line.high {
--dhx-gantt-task-background: #d96c49;
--dhx-gantt-task-color: #fff;
}
/* medium */
.gantt_task_line.medium {
--dhx-gantt-task-background: #f57730;
--dhx-gantt-task-color: #fff;
}
/* low */
.gantt_task_line.low {
--dhx-gantt-task-background: #fff;
--dhx-gantt-task-color: #fff;
}
</style>
사용 가능한 변수는 스킨 커스터마이제이션 페이지에서 확인할 수 있습니다.
마이그레이션 시 원하는 디자인을 얻기 위해 기존 CSS를 업데이트해야 할 수 있습니다.
단일 CSS 파일
모든 테마가 이제 하나의 dhtmlxgantt.css 파일에 포함되어 있습니다.
특정 스킨을 활성화하려면 gantt.skin 속성을 사용하세요:
gantt.skin = "material";
또는 setSkin 메서드를 사용할 수 있습니다:
gantt.setSkin("material");
gantt.setSkin()을 사용하면 Gantt가 다시 그려집니다.
terrace 외의 스킨을 사용할 경우 다음과 같은 마이그레이션 절차가 필요합니다:
- 스킨의 CSS 파일을
dhtmlxgantt.css파일로 교체하세요:
<!-- OLD -->
<link rel="stylesheet" href="./codebase/dhtmlxgantt_material.css" type="text/css">
<!-- NEW -->
<link rel="stylesheet" href="./codebase/dhtmlxgantt.css" type="text/css">
- 자바스크립트에서 필요한 스킨을 활성화하세요:
gantt.setSkin("material");
gantt.init("gantt_here");
내장 베이스라인, 데드라인 및 제 약조건 지원
이전에는 베이스라인을 추가하려면 gantt.addTaskLayer API를 사용하여 직접 코딩해야 했습니다. Gantt 9.0에서는 베이스라인 엔티티와 함께 데드라인 및 작업 제약조건에 대한 내장 지원이 추가되었습니다.
기본 설정을 끄고 베이스라인이나 데드라인을 수동으로 렌더링하려면, 해당 설정 옵션(baselines 및 deadlines)을 사용할 수 있습니다:
// 내장 베이스라인 기능 비활성화
gantt.config.baselines = false;
// 내장 데드라인 기능 비활성화
gantt.config.deadlines = false;
작업 제약조건의 내장 표시 역시 확장된 auto_scheduling 설정을 통해 비활성화할 수 있습니다:
gantt.config.auto_scheduling = {
enabled: true,
show_constraints: false /*!*/
};
이렇게 하면 자동 스케줄링 기능은 유지하면서 기본 작업 제약조건 표시만 비활성화됩니다.
타임라인에서 스티키 라벨
v9.0부터 타임스케일 라벨이 기본적으로 스크롤 시 화면에 고정되어 표시됩니다. 즉, 라벨이 뷰포트를 따라 움직이며 자연스럽게 사라질 때까지 계속 보입니다. 이전 버전에서는 라벨이 셀 중앙에 고정되어 스크롤 시 보이지 않았습니다.
이전 동작으로 되돌리고 싶다면 scale 객체의 sticky 속성을 false로 설정하세요:
gantt.config.scales = [
{unit: "year", step: 1, format: "%Y", sticky: false},
{unit: "month", step: 1, format: "%F", sticky: false},
{unit: "day", step:1, format: "%j", sticky: false}
];
Promise 구현
Bluebird 라이브러리가 Gantt 번들에서 제외되었습니다. Promise는 이제 네이티브 Promise 구현을 사용합니다.
Lightbox 크기 조정
v9.0부터 resizeLightbox 메서드는 더 이상 필요하지 않으므로 Gantt 코드에서 삭제되었습니다. Lightbox 크기 조정이 자동으로 동작하므로, 설정에 resizeLightbox() 메서드가 있다면 오류를 방지하기 위해 제거해야 합니다.
7.1 -> 8.0
리소스 할당
이전 DHTMLX Gantt 버전에서는 리소스 할당 변경 사항이 작업 객체의 속성으로 백엔드에 전송되어, 백엔드 API와의 통합이 다소 복잡해질 수 있었습니다.
DHTMLX Gantt v8.0부터는 리소스 및 리소스 할당 변경 사항을 dataProcessor를 통해 라우팅할 수 있습니다. 자세한 내용은 Routing CRUD actions of resources and resource assignments 섹션을 참고하세요.
내보내기 서비스
v8.0부터 가져오기/내보내기 기능이 gantt 라이브러리에 포함되어 있습니다.
따라서, 온라인 내보내기 서비스를 활성화하기 위해 **https://export.dhtmlx.com/gantt/api.js**를 페이지에 포함했다면, 예를 들어:
<script src="codebase/dhtmlxgantt.js"></script>
<script src="https://export.dhtmlx.com/gantt/api.js"></script>
이 파일을 제거하고 gantt.plugins 메서드를 사용하여 export_api 확장을 활성화해야 합니다:
gantt.plugins({
export_api: true
});
더 이상 사용되지 않는 클래스 이름
v8.0부터 아래의 더 이상 사용되지 않는 클래스 이름이 제거되고 새로운 이름으로 대체 되었습니다:
- ".dhtmlx-info" -> ".gantt-info"
- ".dhtmlx-error" -> ".gantt-info"
- ".dhtmlx_popup_title" -> ".gantt_popup_title"
- ".dhtmlx_popup_text" -> ".gantt_popup_text"
- ".dhtmlx_popup_controls" -> ".gantt_popup_controls"
- ".dhtmlx_ok_button" -> ".gantt_ok_button"
- ".dhtmlx_click_me_button" -> ".gantt_click_me_button"
- ".dhtmlx_popup_button" -> ".gantt_popup_button"
- ".dhtmlx_modal_box" -> ".gantt_modal_box"
- ".dhtmlx-" + config.type -> ".gantt-" + config.type
- ".dhtmlx_" + btn.label.toLowerCase() + "button" -> **".gantt" + btn.label.toLowerCase() + "_button"**
7.0 -> 7.1
버전 7.1은 기존 코드를 수정해야 하는 호환성 깨짐(breaking changes)이 없습니다.
마일스톤 렌더링 방식에 사소한 시각적 변화가 있으며, 필요하다면 코드로 이전 방식으로 되돌릴 수 있습니다. 리소스 패널을 사용하는 대형 프로젝트에서는 리소스 할당의 새로운 로직으로 인해 성능 저하가 발생할 수 있으며, 불필요한 로직을 비활성화하여 이를 완화할 수 있습니다.
마일스톤
이전 버전에 비해 마일스톤 요소의 크기가 변경되어 일반 바(bar)와 동일한 높이를 갖게 되었습니다.
이전 버전과 동일하게 보이길 원한다면, bar_height 속성을 사용하여 마일스톤 요소의 높이를 조정할 수 있습니다:
{
id:23, text:"Mediate milestone", start_date:"13-04-2018",
type:"milestone", parent:"15", bar_height: 35
}
리소스 할당
버전 7.1에서는 리소스 할당에 날짜를 지정하고 DataStore를 통해 리소스 할당을 관리할 수 있는 복잡한 로직이 추가되었습니다. 기존 코드에는 영향을 주지 않으나, 변경 사항으로 인해 리소스 계산에 성능 부담이 생길 수 있습니다.
작업의 특정 날짜에 리소스를 할당할 필요가 없다면, process_resource_assignments 설정을 비활성화하여 성능을 향상시킬 수 있습니다:
gantt.config.process_resource_assignments = false;
Task 객체의 새로운 선택적 속성
이제 gantt가 아래 작업 객체 속성을 처리하며, 작업의 표시 방식에 영향을 미칩니다:
- "task.row_height"
- "task.bar_height"
- "task.hide_bar"
- "task.rollup"
동일한 이름의 사용자 정의 속성을 사용 중이라면, 충돌을 피하기 위해 이름을 변경해야 합니다.
데이터 파싱 시 딥 카피(Deep copy)
Gantt는 v6.3.2부터 v7.1까지 데이터 파싱 시 데이터 객체를 딥 카피했습니다.
v7.1부터는 기본적으로 이 기능이 비활성화됩니다.
기존 동작을 원한다면 gantt.config.deepcopy_on_parse를 true로 설정하세요:
gantt.config.deepcopy_on_parse = true;
더 이상 사용되지 않는 config
gantt.config.task_height 속성은 v7.1부터 더 이상 사용되지 않습니다. 해당 속성은 계속 동작하지만, 새로운 gantt.config.bar_height 옵션을 사용하는 것이 좋습니다:
gantt.config.bar_height = 50;
6.3 -> 7.0
확장 및 로케일 파일
최신 업데이트 v7.0에서는 Gantt 패키지 구조에 두 가지 주요 변경 사항이 있습니다:
- 모든 확장 파일이 이제 dhtmlxgantt.js 파일에 번들로 포함됩니다. 따라서, dhtmlxGantt에서 제공하는 추가 확장을 활성화하려면 API 호출을 사용해야 합니다.
- 내장 패키지에서 확장 파일을 이미 페이지에 포함한 경우, 예를 들어:
<script src="../codebase/dhtmlxgantt.js"></script>
<script src="../codebase/ext/dhtmlxgantt_auto_scheduling.js"></script>
또는
import "dhtmlx-gantt";
import "dhtmlx-gantt/ext/dhtmlxgantt_auto_scheduling";
확장 파일을 제거하고 gantt.plugins 메서드를 사용하여 확장을 활성화해야 합니다:
gantt.plugins({
auto_scheduling: true
});
전체 확장 목록은 여기