이 문서는 AI에 의해 번역되었습니다. 정확한 정보는 영어 버전을 참조하세요.
RunJS에서 컨텍스트 이벤트(필드 값 변경, 속성 변경, 리소스 새로고침 등)를 구독합니다. 이벤트는 유형에 따라 ctx.element의 사용자 정의 DOM 이벤트 또는 ctx.resource 내부 이벤트 버스로 매핑됩니다.
| 시나리오 | 설명 |
|---|---|
| JSField / JSEditableField | 외부(폼, 연동 등)에서 필드 값이 변경될 때 UI를 동기적으로 업데이트하여 양방향 바인딩을 구현합니다. |
| JSBlock / JSItem / JSColumn | 컨테이너의 사용자 정의 이벤트를 수신하여 데이터나 상태 변화에 대응합니다. |
| resource 관련 | 리소스 새로고침, 저장 등 생명주기 이벤트를 수신하여 데이터 업데이트 후 로직을 실행합니다. |
| 이벤트명 | 설명 | 이벤트 소스 |
|---|---|---|
js-field:value-change | 필드 값이 외부에서 수정됨 (예: 폼 연동, 기본값 업데이트) | ctx.element의 CustomEvent, ev.detail이 새 값임 |
resource:refresh | 리소스 데이터가 새로고침됨 | ctx.resource 이벤트 버스 |
resource:saved | 리소스 저장이 완료됨 | ctx.resource 이벤트 버스 |
이벤트 매핑 규칙:
resource:접두사가 붙은 이벤트는ctx.resource.on을 통해 전달되며, 그 외에는 일반적으로ctx.element의 DOM 이벤트(존재하는 경우)를 통해 전달됩니다.
ctx.on으로 등록한 리스너는 메모리 누수나 중복 실행을 방지하기 위해 적절한 시점에 ctx.off을 통해 제거해야 합니다.useEffect의 클린업(cleanup) 함수에서 ctx.off를 호출합니다.ctx.off가 존재하지 않을 수도 있으므로, 호출 시 옵셔널 체이닝을 사용하는 것이 좋습니다: ctx.off?.('eventName', handler).ctx.on(eventName, handler) 호출은 그에 대응하는 ctx.off(eventName, handler)가 있어야 하며, 전달되는 handler 참조는 동일해야 합니다.on/offjs-field:value-change를 트리거함)