ContextMenu
이 컨트롤은 무엇인가요?
ContextMenu는 마우스 오른쪽 버튼 클릭(우클릭) 시 나타나는 메뉴를 만드는 컨트롤입니다.
내부적으로는 jquery-ui-contextmenu 플러그인을 감싸서 syn.uicontrols.$contextmenu 싱글턴 객체로 제공합니다.
다른 컨트롤들과 다르게 ContextMenu 자체는 화면에 아무것도 그리지 않습니다. 대신 target(메뉴가 뜰 대상)과 delegate(그 대상 안에서 실제로 우클릭을 감지할 하위 요소 셀렉터)를 지정해 두면, 사용자가 해당 요소를 우클릭했을 때 미리 정의한 menu 트리(항목/구분선/하위 메뉴)를 팝업으로 보여줍니다.
언제 사용하나요?
- 트리 구조 컨트롤(TreeView, OrganizationView 등)의 노드를 우클릭해서 "추가/이름변경/삭제" 같은 동작을 실행할 때
- 그리드(AUIGrid 등)의 행/셀을 우클릭해서 "복사/붙여넣기/행 삭제" 같은 동작을 제공할 때
- 일반
div,span같은 임의의 화면 영역에 우클릭 메뉴를 붙이고 싶을 때
실제로는 TreeView(syn_tree)나 OrganizationView(syn_organization)와 함께 쓰이는 경우가 많습니다. target에 트리/조직도 컨테이너 셀렉터를, delegate에 노드 타이틀 요소 셀렉터(예: span.fancytree-title, div.node)를 지정하는 방식입니다.
빠른 시작
<div id="divTarget">
<input type="button" value="여기를 우클릭 해보세요" />
</div>
<syn_contextmenu id="ctxSample" syn-options="{
target: '#divTarget',
delegate: 'input[type=button]',
menu: [
{ title: 'Cut', cmd: 'cut' },
{ title: 'Copy', cmd: 'copy', uiIcon: 'ui-icon-copy' },
{ title: '---' },
{
title: 'More', children: [
{ title: 'Sub 1', cmd: 'sub1' },
{ title: 'Sub 2', cmd: 'sub2' }
]
}
]
}" syn-events="['beforeOpen', 'select']"></syn_contextmenu>
'use strict';
let $samplePage = {
event: {
ctxSample_select(evt, ui) {
syn.$l.eventLog('ctxSample_select', ui.cmd);
}
}
}
핵심 포인트:
- 마크업은
<syn_contextmenu>커스텀 태그로 작성하고,syn-options에target/delegate/menu