table row에 double click event시 modify form 띄우기
1.dataTable에 double click event
연동
event : dblclick
selector : tr
//double click
$('#Elements tbody').on('dblclick', 'tr', function(){
var tr = $(this);
var row = elementTable.row( tr );
var rowId = dcmTK.GetRowId(row);
if(!dcmTK.ShowEditForm(row))
return;
});
2.nodeDCMTK module에 ShowEditForm()
함수 추가. row.data()
를 통해 실제 각 column에 해당하는 data 접근
function ShowEditForm(row){
var rowData = row.data();
}
3. vex.defaultOptions.className = 'vex-theme-top';
를 통해 top theme적용 하고 dialog 출력
vex.defaultOptions.className = 'vex-theme-top';
vex.dialog.open({
message: 'Modify Element Value',
input: [
'<label for="tag">TAG</label><input name="tag" type="text" value="{0}" readonly/>'.format(tag),
'<label for="name">Name</label><input name="name" type="text" value="{0}" readonly/>'.format(name),
'<label for="vr">VR</label><input name="vr" type="text" value="{0}" readonly />'.format(vr),
'<label for="value">Value</label><input name="value" type="text" value="{0}" />'.format(value)
].join(''),
buttons: [
$.extend({}, vex.dialog.buttons.YES, { text: 'OK' }),
$.extend({}, vex.dialog.buttons.NO, { text: 'Cancel' })
],
callback: function (data) {
if (!data)
return;
console.log('value=', data.value);
}
});
4.여기서 기존 row.data()의 data형태가 byte array이고 toString()시 끝에 빈 문자열이 붙는 문제
제거를 위해 아래 두 함수 이용
function strlen(str){
var stringByteLength = (function(s,b,i,c){
for(b=i=0;c=s.charCodeAt(i++);b+=c>>11?3:c>>7?2:1);
return b
})(str);
return stringByteLength;
}
function trim(str){
var len = this.strlen(str);
return str.substring(0, len);
}
5.최종 dialog open 함수
function ShowEditForm(row){
var rowData = row.data();
var tag = util.trim(rowData['tag'].toString('utf8'));
var name = util.trim(rowData['name'].toString('utf8'));
var vr = util.trim(rowData['vr'].toString('utf8'));
var value = util.trim(rowData['value'].toString('utf8'));
vex.defaultOptions.className = 'vex-theme-top';
vex.dialog.open({
message: 'Modify Element Value',
input: [
'<label for="tag">TAG</label><input name="tag" type="text" value="{0}" readonly/>'.format(tag),
'<label for="name">Name</label><input name="name" type="text" value="{0}" readonly/>'.format(name),
'<label for="vr">VR</label><input name="vr" type="text" value="{0}" readonly />'.format(vr),
'<label for="value">Value</label><input name="value" type="text" value="{0}" />'.format(value)
].join(''),
buttons: [
$.extend({}, vex.dialog.buttons.YES, { text: 'OK' }),
$.extend({}, vex.dialog.buttons.NO, { text: 'Cancel' })
],
callback: function (data) {
if (!data)
return;
console.log('value=', data.value);
}
});
return true;
}
6.최종 결과 화면
![](https://i1.wp.com/scanhand.cafe24.com/wp-content/uploads/2018/04/eDICOMViewer_openform.png?resize=505%2C297)