# 문제 해결

## Content

스케줄러가 예상대로 동작하지 않는 경우 이 페이지에서 문제 해결 방법을 확인할 수 있습니다. 각 섹션에서는 먼저 발생한 증상을 설명하고, 가능한 원인과 문제를 진단하기 위해 확인해야 할 항목을 안내합니다.

특정 증상을 확인하기 전에 다음 항목을 먼저 점검하세요. 호스트 요소의 높이가 0이 아닌지, Wijmo CSS가 로드되었는지, `itemsSource`가 설정되었는지, `start`와 `end`가 유효한 `Date` 값에 매핑되었는지, `displayDate`가 설정되었는지, 활성 `definition`이 유효한지 확인하세요.

## 컨트롤이 렌더링되지 않음

### 스케줄러 영역이 비어 있음

**가능한 원인:**

* 호스트 요소의 높이가 제대로 설정되지 않았거나, 스타일시트가 누락되었거나, 모듈을 불러오는 과정에서 오류가 발생했을 수 있습니다.

**확인 사항:**

* `FlexScheduler`를 생성할 때 호스트 요소가 존재하고, 높이가 0이 아니며, 화면에 표시되는지 확인합니다.
* `@mescius/wijmo.styles/wijmo.css`가 로드되었는지 확인합니다.
* 네이티브 ES 모듈을 사용하는 경우 `@mescius/wijmo`, `@mescius/wijmo.input`, `@mescius/wijmo.scheduler`에 대한 import map 항목을 확인합니다.

### 브라우저에서 모듈을 찾을 수 없음

**가능한 원인:**

* `@mescius/wijmo.scheduler`에서 참조하는 패키지가 올바르게 매핑되지 않았거나, 빌드 환경에서 해당 패키지를 찾을 수 없을 수 있습니다.

**확인 사항:**

* 번들러가 패키지 메타데이터를 통해 `@mescius/wijmo`와 `@mescius/wijmo.input`을 찾을 수 있는지 확인합니다.
* 네이티브 ES 모듈을 사용하는 경우 각 패키지에 대한 import map 항목을 명시적으로 설정해야 합니다.

## 이벤트와 날짜가 올바르지 않음

### 이벤트가 표시되지 않음

**가능한 원인:**

* 데이터 소스가 비어 있거나, 필드 매핑이 일치하지 않거나, 날짜 값이 유효하지 않을 수 있습니다.

**확인 사항:**

* `itemsSource`, 매핑된 `start` 및 `end` 속성, 유효한 `Date` 값, 그리고 `start < end` 조건을 확인합니다.
* 서버에서 직렬화된 날짜는 바인딩하기 전에 변환합니다.
* `displayDate`를 데이터가 포함된 날짜로 설정합니다.

### 이벤트 시간이 이동되어 표시됨

**가능한 원인:**

* `displayDate`, `timeZone` 또는 서버 측 UTC/로컬 시간 변환 정책이 일치하지 않을 수 있습니다.

**확인 사항:**

* 스케줄러의 `timeZone`과 각 `Date` 값을 생성하는 데 사용한 정책을 확인합니다. 명시적인 변환 없이 로컬 시각 값과 UTC 시점을 혼용하지 마세요.

### 하나의 이벤트가 여러 조각으로 표시되는 경우

**가능한 원인:**

* 이벤트가 여러 날짜에 걸쳐 있거나 여러 리소스 섹션에 걸쳐 표시되는 경우 발생할 수 있습니다.

**확인 사항:**

* 이벤트를 여러 조각으로 나누어 표시하는 레이아웃에서는 정상적인 동작입니다. 각 조각을 별개의 항목으로 처리하지 말고, 하나의 원본 항목으로 취급하여 수정하세요.

## 뷰 및 리소스 표시 문제

### 리소스 레인이 비어 있는 경우

**가능한 원인:**

* 이벤트 데이터, 리소스 설명자, 축 바인딩에서 서로 다른 필드나 식별자를 사용하고 있을 수 있습니다.

**확인 사항:**

* `fieldExpr`, `dataSource`의 값, 활성 `definition`의 바인딩을 확인합니다.
* 다중 값 리소스를 사용하는 경우 `allowMultiple: true`로 설정되어 있는지, 해당 속성의 값이 배열인지 확인합니다.

### 사용자 지정 `definition`이 렌더링되지 않는 경우

**가능한 원인:**

* 축 식별자가 중복되었거나 시간 기반 레이아웃의 규칙을 충족하지 못했을 수 있습니다.

**확인 사항:**

* `planSchedulerProjection`을 호출하고 `integrity.level` 및 `integrity.reasons`를 확인합니다.
* 시간 기반 레이아웃에는 `time:hour` 바인딩이 하나 필요합니다.

### 사용자 지정 `definition`의 그룹화 결과가 예상과 다른 경우

**가능한 원인:**

* `time:hour`가 다른 바인딩과 동일한 축을 공유하여 레이아웃이 정규화되었을 수 있습니다.

**확인 사항:**

* 다른 바인딩을 반대쪽 축으로 이동합니다.

### 작업 시간이 예상과 다르게 적용되는 경우

**가능한 원인:**

* `workDays`가 `workHours`보다 우선 적용되거나, 비작업 시간 셀이 숨겨진다고 잘못 이해했을 수 있습니다.

**확인 사항:**

* `workDays`를 초기화하거나 수정합니다. 작업 시간 설정은 셀의 스타일을 변경하지만 셀을 숨기지는 않습니다.
* 축 항목을 표시하지 않으려면 시간 바인딩의 `visible` 콜백을 사용합니다.

### 동기화된 스케줄러의 스크롤 위치가 일치하지 않는 경우

**가능한 원인:**

* 두 스케줄러가 서로 다른 `definition`을 사용하거나, 동기화 대상 축의 바인딩이 달라 동일한 스크롤 오프셋이 서로 다른 위치를 가리킬 수 있습니다.

**확인 사항:**

* 두 스케줄러에서 동일한 `definition`을 사용하거나 동기화 대상 축의 바인딩을 일치시킵니다.
* 파트너 참조를 보유한 인스턴스에서 `scrollingSyncDirection`이 올바르게 설정되어 있는지도 확인합니다.

## 편집 및 포인터 조작이 동작하지 않는 경우

### 변경 사항이 적용되지 않는 경우

**가능한 원인:**

* 유효성 검사에 실패했거나 취소 가능한 이벤트에서 변경 요청이 거부되었을 수 있습니다.

**확인 사항:**

* `itemChanging` 및 `conflictChecked` 이벤트에서 `args.cancel`이 설정되는지 확인합니다.
* 시작 및 종료 시간에 대한 유효성 검사도 확인하고, 서버에서 변경 사항을 거부한 경우 컬렉션을 다시 동기화합니다.

### 드래그 또는 크기 조정이 동작하지 않는 경우

**가능한 원인:**

* 관련 옵션이 비활성화되어 있거나 현재 레이아웃에서 해당 작업을 지원하지 않을 수 있습니다.

**확인 사항:**

* `allowDragEvent`와 `allowResizeEvent` 설정을 확인합니다.
* Summary 뷰에서는 이벤트 이동은 지원하지만 크기 조정은 지원하지 않습니다.

### 충돌이 감지되지만 작업이 차단되지 않는 경우

**가능한 원인:**

* 충돌 감지는 기본적으로 수행되지만, 충돌이 감지되었다는 이유만으로 작업이 자동으로 차단되지는 않습니다. 작업을 취소하려면 애플리케이션에서 별도로 처리해야 합니다.

**확인 사항:**

* 충돌이 감지된 작업을 취소하려면 `conflictChecked` 이벤트에서 `args.cancel = true`를 설정합니다. 최종 유효성 검사는 서버 측에서도 수행하도록 유지하세요.

## 표시 사용자 지정 및 키보드 동작

### 사용자 지정 이벤트 콘텐츠가 안전하지 않거나 올바르게 표시되지 않는 경우

**가능한 원인:**

* `itemTemplate`의 HTML 문자열에 동적 값을 삽입하면서 해당 값을 이스케이프하지 않았을 수 있습니다.

**확인 사항:**

* 사용자 입력값을 이스케이프 처리합니다. 명령을 처리할 때는 렌더링된 이벤트 조각이 아닌 원본 항목을 사용합니다.
* 

### 컨텍스트 메뉴 명령이 비활성화된 경우

**가능한 원인:**

* 현재 대상이나 명령에 대해 `canExecute`가 `false`를 반환할 수 있습니다.

**확인 사항:**

* `hitTestType`을 확인하고, 기본 제공 명령은 기본 클래스의 구현을 호출합니다.

### CRUD 작업 후 키보드 포커스가 사라지는 경우

**가능한 원인:**

* 항목이 현재 뷰에서 벗어났거나 대체 UI로 인해 문서의 Tab 이동 순서가 변경되었을 수 있습니다.

**확인 사항:**

* 기본 Tab 이동 순서를 유지하고, 문서에 설명된 포커스 복원 동작을 확인합니다.

## 문제 진단에 필요한 정보

문제를 보고할 때는 다음 정보를 포함해주시기 바랍니다.

* 활성 `definition`의 키
* 표시 날짜
* 시간대
* 항목 수
* 대표 원본 항목 1개
* 매핑된 필드 이름
* 리소스 설명자
* 브라우저 콘솔 오류

이벤트 설명이나 위치 정보 등 민감한 데이터는 로그에 포함하지 마세요.