개발자's Life

2022-08-19 오늘도 DataTable를 이용하여 회사 업무 본문

Developer Daily

2022-08-19 오늘도 DataTable를 이용하여 회사 업무

Rowen Jobs 2022. 8. 19. 21:47
728x90
반응형

오늘도 어김없이 DataTable로 화면에 데이터 출력하고 입력하는 Input 창을 만들었다. 중간 중간 MSSQL 로 데이터 입력 및 수정 요청 처리건들을 처리하고 고도화 기능 개발을 계속 이어나갔다. 

하나의 데이터를 선택하였을때 거기에 해당하는 유효성 검사를 위해 필요한 데이터를 또 뽑아주고 비교하고 이런 작은 것들 신경쓸께 많았다. 큰 프로세스를 먼저 짜고 그후 코드를 하나씩 짜다보니 필요한 유효성 검사들이 더 많았다. 

현재 개발자 반년 조금 지났지만 그 반년동안 기능 협의의 시간에 더 시간을 많이 할애한거 같다보니 지금 현재 기능 협의가 끝난 후 개발에만 집중하는 시간이 협의보다 괜찮은 시간 같았다. 

 

우선 정리해서 설명하자면 DataTable을 만드는 함수를 만들어서 <tbody>에 데이터를 그려주는데, Datatable에 ajax로 뽑은 기존 데이터 말고 <select>구문에 다른 데이터가 필요하여 어제와 똑같은 작업을 반복해 주었다. 그리고 데이터를 가공하기 위해 DTO 기능으로 만들어놓은 Model 에 추가적으로 객체를 추가하여 진행하였고 기존에 만들어진 시스템의 틀을 지키며 더 효율적인 개발을 할려고 노력했다. (회사코드는 아님)

 

DataTable 형태 참고하면 좋을듯 하다.

function makeDataTable(list){
  
   var html = '<select>';
  
   $.ajax({
      url : "/url",
      type : "POST",
      data: {
         list : list,
         code : $("#code").val()
      },
      success : function(data){ // Controller에 Map 타입으로 return 해주었다
         data.list.forEach(function(item, index, arr2){
            html += "<option value='" + item.code + "'>" + item.name + "</option>"
         });

         html += "</select>";
      }
   });
   
   // 제출 정보 출력 
   $("#table").DataTable({
      scrollCollapse: true,
      responsive:true,
      destroy: true,
      dom: '<"top"i><"top"f>rt<"bottom"lp><"clear">',
      bsort : false,
      paging : false,
      bPaginate : false,
      ordering : false,
      ajax:{
         url : "/url/makeDatatable",
         type : "POST",
         data: {
            list : list,
            code : $("#code").val()
         }
      },
      columns:[
         {
            data:"column1",
            className: 'dt-body-center' 
         },
         {
            data:"column2",
            className: 'dt-body-center' 
         },
         { 
            data:"column3",
            className: 'dt-body-center'
         },
         { 
            data:"column4",
            className: 'dt-body-center',
            render:function(data, type, row){
               return stepListHtml;     
            }
         },
         { 
            data:"column5",
            className: 'dt-body-center'
         },
         { 
            data:"column6",
            className: 'dt-body-left',
            render:function(data, type, row){
               return html;  
            }
         },
         { 
            data:"column7",
            className: 'dt-body-center'
           
         },
         { 
            data:"column8",
            className: 'dt-body-center'
          
         },
         { 
            data:"column9",
            className: 'dt-body-center',
            width: '30%'
         },
      ],
      drawCallback: function(data, type, row) {
           $('.select2').select2();
        }
   });
   
   // 기존 선택 되어 있는 정보 출력 
   // setTimeout을 한 이유는 위의 dataTable에 html이 그려지기 전에 html에 있는 .list에  값을 넣어주기 때문에 사용
   setTimeout(()=>{
      $.ajax({
         url : "/url",
         type : "POST",
         data: {
            list : list,
            code : $("#code").val()
         },
         success : function(data){
            data.data.forEach(function(data, index, arr){
               $(".list").eq(index).val(data.list).change();

            });
         }
      });
   },100 );

"신입 개발자라 부족한 부분과 틀린 단어 선택일 경우 댓글로 알려주시면 감사하겠습니다!!!!"

728x90
Comments