본문으로 건너뛰기

팝업 메시지와 모달 박스

메시지는 간트 차트에서 사용자의 오류를 알리거나, 작업을 확인하거나 거절하거나 옵션 중 하나를 선택하는 등의 용도로 사용됩니다.
간트 차트 메시지는 DHTMLX의 message 저장소 포크를 기반으로 합니다.
따라서 dhtmlxMessage의 모든 기능이 dhtmlxGantt 메시지에도 적용됩니다.

메시지에는 두 가지 주요 유형이 있습니다: 간단한 팝업 메시지 박스와 버튼이 있는 모달 메시지 박스로, 후자는 애플리케이션의 작업을 차단합니다.

모달 메시지 박스는 세 가지 가능한 유형 중 하나에 속할 수 있습니다:

기본 팝업 메시지​

기본 모달 메시지 박스를 만들려면 gantt.message 메서드를 사용합니다. 메서드의 필수 매개변수는 메시지의 텍스트입니다:

gantt.message("The task is updated");

메시지 상자에는 세 가지 유형이 있습니다:

  • 기본 메시지 박스 (type:"info")

default_message

  • 오류 메시지 박스 (type:"error")

error_message

  • 경고 메시지 박스 (type:"warning")

warning_message

필요한 메시지 박스를 만들려면 해당 값으로 type 속성을 정의해야 합니다:

// 오류 메시지 박스 생성
gantt.message({type:"error", text:"Invalid data format"});

Gantt message types

메시지 박스에 서로 다른 스타일을 적용하려면 type 매개변수를 통해 CSS 클래스를 지정해야 합니다(여기서 스타일링 방법을 참고)).

메시지 박스 위치 지정​

기본적으로 팝업 메시지 박스는 창의 오른쪽 상단 모서리에 나타납니다. 부모 애플리케이션의 작업을 차단하는 모달 메시지 박스와 달리 화면을 가리지 않습니다. 메시지 박스의 위치를 변경하려면 gantt.message.position 속성을 사용합니다:

gantt.message.position = 'bottom';

관련 샘플 Message position

메시지 위치에는 네 가지 가능한 값이 있습니다:

  • top - 창의 오른쪽 상단 모서리에 메시지 박스를 표시합니다(기본값으로 설정)
  • bottom - 창의 오른쪽 하단 모서리에 메시지 박스를 표시합니다
  • left - 간트 차트 아래 창의 왼쪽에 메시지 박스를 표시합니다
  • right - 간트 차트 아래 창의 오른쪽에 메시지 박스를 표시합니다

만료 간격​

메시지 박스의 만료 간격을 expire 매개변수를 통해 커스터마이즈할 수 있습니다. 이는 메시지 박스가 사라지는 시간 간격(밀리초 단위)입니다. 기본값은 4000밀리초입니다.

이 값을 변경하거나 만료 기간을 아예 취소하려면 expire 매개변수를 "-1"로 설정하면 됩니다. 이 경우 마우스 클릭 시에만 사라집니다.

gantt.message({
type:"error",
text:"Invalid data format",
expire:10000
});

API로 메시지 박스 숨기기​

지정된 메시지 박스를 수동으로 숨기고 자동으로 사라질 때까지 기다리지 않으려면 gantt.message.hide(boxId) 메서드를 사용할 수 있습니다. 하나의 매개변수를 받습니다:

  • boxId - 박스 생성자에 지정된 박스 ID
gantt.message({
id:"myBox",
text:"Page is loaded"
});

gantt.message.hide("myBox");

모달 메시지 박스​

모달 메시지 박스는 필요한 동작이 수행될 때까지(대개 버튼 클릭) 부모 애플리케이션의 작업을 차단합니다. 버튼 클릭과 함께 콜백 함수가 실행됩니다.

모달 메시지 박스에는 세 가지 유형이 있습니다:

박스의 공통 속성은 다음과 같습니다:

  • id - 메시지 박스의 ID
  • title - 헤더의 텍스트
  • type - 메시지 박스의 유형(경고 또는 오류 등)
  • text - 메시지 박스 본문의 텍스트
  • ok - "OK" 버튼의 텍스트
  • cancel - "Cancel" 버튼의 텍스트(확인 박스용)
  • callback - 버튼 클릭 시 호출되는 함수. 클릭된 버튼에 따라 매개변수로 true 또는 false를 받습니다
  • position - 현재는 하나의 값만 지원 - "top"; 다른 값은 중앙 정렬로 처리
  • width - 모달 박스의 너비(CSS [length] 또는 [percentage] 값, 예: "100px", "50%")
  • height - 모달 박스의 높이(CSS [length] 또는 [percentage] 값, 예: "100px", "50%")

Alert Message Box​

alert

Alert 메시지 박스에는 "OK" 버튼이 포함되어 있습니다. "OK" 버튼의 텍스트를 설정하려면 ok 매개변수를 해당 값으로 사용합니다:

  • 짧은 형식(메시지 텍스트만 포함 - 매개변수 'text'의 암시적 사용. 다른 매개변수는 기본값을 가짐):
gantt.alert("Text");
  • 전체 형식(여러 사용 가능한 매개변수를 포함. 명시되지 않은 매개변수는 기본값 사용)
gantt.alert({
text:"some text",
title:"Error!",
ok:"Yes",
callback:function(){...}
});

Confirm Message Box​

confirm

확인 메시지 박스에는 두 개의 버튼이 있습니다: "OK" 버튼과 "Cancel" 버튼. 버튼의 텍스트는 해당 이름으로 속성에 정의되어 있습니다.

  • 짧은 형식
gantt.confirm("ConfirmText");
  • 전체 형식
gantt.confirm({
text: "Continue?",
ok:"Yes",
cancel:"No",
callback: function(result){
gantt.message("Result: "+result);
}
});

modalbox

모달박스는 몇 가지 특징을 가집니다:

  • text에 임의의 HTML 콘텐츠를 포함할 수 있습니다
  • buttons 배열에 여러 버튼을 지정할 수 있으며, 버튼의 텍스트 값이 포함됩니다
  • callback 함수는 선택된 버튼의 인덱스를 매개변수로 받습니다
gantt.modalbox({
title:"Settings",
text: " ... html code here... ",
buttons:["Save", "Defaults", "Cancel"],
callback: function(result){
gantt.alert(result);
}
});

모달박스 버튼 구성 설정 방법​

모달박스 버튼의 구성을 정의하는 두 가지 주요 방법이 있습니다:

  • 짧은 형식:
gantt.modalbox({
// other settings
buttons:["Save", "Delete", "Cancel"],
callback: function(result){
switch(result){
case "0":
//Save
break;
case "1":
//Delete
break;
case "2":
//Cancel
break;
}
}
});

콜백 함수의 결과는 배열에서 눌린 버튼의 문자열 인덱스("0", "1", "2",...)와 같습니다. 각 버튼은 레이블을 소문자로 변환한 이름에서 CSS 클래스를 받아갑니다. 예를 들면 gantt_save_button, gantt_delete_button, gantt_cancel_button 와 같습니다.

이 클래스들은 버튼의 스타일링에 사용할 수 있습니다:

.gantt_delete_button div{
background:red;
}

동일한 버튼 이름이 여러 팝업에서 서로 다르게 스타일링되어야 하는 경우, type 구성을 사용할 수 있습니다:

gantt.modalbox({
// other settings
type:"special_popup",
buttons:["Save", "Delete", "Cancel"]
});

type은 "gantt_" 문자열로 접두사가 붙고 팝업 요소의 클래스 이름으로 추가됩니다:

.gantt_special_popup .gantt_delete_button div{
background:red;
}
  • 전체 형식:

버튼의 CSS 클래스와 콜백 값은 더 긴 구성 형식을 사용하여 명시적으로 정의될 수 있습니다:

gantt.modalbox({
// other settings
buttons: [
{ label:"Save", css:"link_save_btn", value:"save" },
{ label:"Cancel", css:"link_cancel_btn", value:"cancel" },
{ label:"Delete", css:"link_delete_btn", value:"delete" }
],
callback: function(result){
switch(result){
case "save":
//Save
break;
case "cancel":
//Cancel
break;
case "delete":
//Delete
break;
}
}
});
  • 라벨 매개변수는 필수이며, CSS와 value 옵션은 생략될 수 있습니다. 누락된 매개변수는 버튼 구성의 짧은 형식과 동일하게 계산됩니다: CSS는 소문자로 변환된 버튼 레이블에서 상속되고 버튼 인덱스는 값으로 사용됩니다.

CSS는 버튼 요소에 클래스 이름으로 추가되며 "gantt_" 접두사를 앞에 붙입니다:

.gantt_link_delete_btn div{
background:red;
}

모달 메시지 박스 숨기기​

모달 메시지 박스를 수동으로 숨기려면 gantt.modalbox.hide() 메서드를 사용할 수 있습니다. 매개변수로 모달박스의 div 컨테이너를 받습니다:

var box = gantt.modalbox({    
title:"Settings",
text: " ... html code here... ",
buttons:["Save", "Defaults", "Cancel"],
callback: function(result){
gantt.alert(result);
}
});

gantt.modalbox.hide(box);

경고 및 확인 모달 박스의 경우에도 gantt.modalbox.hide() 메서드를 사용해야 합니다:

var box = gantt.confirm({
text: "Continue?",
ok:"Yes",
cancel:"No",
callback: function(result){
gantt.message("Result: "+result);
}
});

gantt.modalbox.hide(box);

Gantt가 모달박스 버튼과 함께 작동하는 방식​

기본적으로 버튼의 이름은 텍스트로 설정됩니다. 버튼의 이름이 HTML 요소로 설정된 경우(예: 글꼴을 굵게 만들거나 머티리얼 아이콘을 추가하는 등) 버튼 클릭 시 콜백 함수의 결과는 null이 됩니다. 이는 Gantt가 클릭된 요소의 부모에 있는 특정 속성을 감시하기 때문입니다. 기대하는 속성이 없으면 Gantt는 null을 반환합니다. 또한 Gantt는 버튼으로 지정한 모든 요소를 <div> 태그로 감쌉니다.

따라서 텍스트를 클릭했을 때 문자열 요소를 반환하면 부모는 비어 있는 <div> 요소가 되고 결과는 null이 됩니다. 하지만 텍스트 외부를 클릭하여 버튼을 누른 경우 부모는 필요한 속성을 모두 가진 요소가 되므로 더 기대되는 결과를 얻을 수 있습니다:

  • 확인 박스의 경우 true/false
  • 모달박스의 경우:
    • 배열 내 요소의 인덱스 번호(짧은 형식의 경우)
    • value 매개변수의 값(전체 형식의 경우)

즉, 버튼 이름으로 HTML 요소를 사용하고 싶다면 모든 요소를 data-result 속성을 가진 두 개의 div로 감싸야 합니다. 예를 들면:

gantt.confirm({
ok:`<div data-result="yes"><div data-result="yes"><i>Yes</i></div></div>`,
cancel:`<div data-result="no"><div data-result="no"><i>No</i></div></div>`,
});

gantt.modalbox({
buttons: [
{ label:`<div data-result="yes">
<div data-result="yes"><i>Yes</i></div>
</div>`,
css:"link_save_btn", value:"yes" },
{ label:`<div data-result="no">
<div data-result="no"><i>No</i></div>
</div>`,
css:"link_cancel_btn", value:"no" },
{ label:`<div data-result="cancel">
<div data-result="cancel"><i>Cancel</i></div>
</div>`,
css:"link_cancel_btn", value:"cancel" },
],
});

다른 요소를 버튼으로 사용해야 하는 경우, 모든 상위 요소에도 data-result 속성이 있어야 합니다. 아래 예제에서는 버튼의 이름으로 <u> 태그를 사용했습니다. 따라서 다른 두 개의 <div> 상위 요소와 동일한 data-result 속성을 가집니다:

gantt.confirm({
ok:`<div data-result="yes">
<div data-result="yes"><u data-result="yes"><i>Yes</i></u></div>
</div>`,
cancel:`<div data-result="no">
<div data-result="no"><u data-result="no"><i>No</i></u></div>
</div>`,
});

gantt.modalbox({
buttons: [
{ label:`<div data-result="yes">
<div data-result="yes">
<u data-result="yes"><i>Yes</i></u>
</div>
</div>`,
css:"link_save_btn", value:"yes" },
{ label:`<div data-result="no">
<div data-result="no">
<u data-result="no"><i>No</i></u>
</div>
</div>`,
css:"link_cancel_btn", value:"no" },
{ label:`<div data-result="cancel">
<div data-result="cancel">
<u data-result="cancel"><i>Cancel</i></u>
</div>
</div>`,
css:"link_cancel_btn", value:"cancel" },
],
});

스타일링​

어떤 유형의 메시지 박스이든 원하는 모양을 얻기 위해 커스텀 스타일을 정의할 수 있습니다. 일반적으로 적합한 CSS 클래스는 type 매개변수를 통해 지정됩니다: CSS 클래스를 정의하고 매개변수를 그 이름으로 설정합니다.

다음과 같이 주의해야 할 규칙이 있습니다:

  • 경고 및 확인 박스의 CSS 클래스를 설정하려면 창(window 관련) 방식으로 상자를 초기화해야 합니다.
  • 메시지 박스의 CSS 클래스를 설정하려면 일반(common) 방식으로 상자를 초기화해야 합니다.
  • CSS 클래스의 이름은 'gantt-' 접두사를 붙여야 합니다.
  • 스타일을 올바르게 적용하려면 .gantt-some div처럼 클래스 이름을 사용해야 합니다. 이는 간트 메시지 안의 요소에 적용되도록 의도된 것임을 명시하기 위함입니다.
<style type="text/css">
.gantt-myCss div{
font-weight:bold;
color:wheat;
background-color:crimson;
}
</style>


gantt.message({ type:"myCss", text:"some text" });

관련 샘플 Styling message boxes

모달 창과 키보드 상호작용​

모달 박스의 키보드 기능은 gantt.message.keyboard 속성으로 제어됩니다. 초기값은 true로 설정되어 있습니다.

기본적으로 모달 박스는 페이지의 키보드 이벤트를 차단합니다. 사용할 수 있는 키는 다음과 같습니다:

  • "space" 와 "enter" - 모달 박스의 결과를 true로 설정
  • "escape" - 모달 박스의 결과를 false로 설정

keyboard 속성을 false로 설정하면 키보드 이벤트를 사용할 수 있게 되며(위에 언급한 키는 비활성화됩니다):

gantt.message.keyboard = false; 
gantt.modalbox({...});

이를 통해 모달 박스 내부의 입력 필드 등에 값을 입력하는 등의 전체 키보드 사용이 가능합니다.

Need help?
Got a question about the documentation? Reach out to our technical support team for help and guidance. For custom component solutions, visit the Services page.