2017-11-13 18 views
0

jquery DataTables를 사용하여 매우 만족 스럽지만 성능을 향상시켜야하는 상황이 하나 있습니다. 데이터에 따라 셀의 클래스를 업데이트하고 있습니다. 이렇게하려면 render 함수를 사용하고 설정을 통해 api 인스턴스를 만들어 api를 통해 셀을 유지합니다. 이 작업을 수행하는 더 좋은 방법이 있습니까? 내가 볼 수셀 클래스 수정시 DataTable 성능 향상

{ 
     "data": "statusText", "className": "status", 
     "render": function (data, type, full, meta) { 
      switch (type) { 
       case "display": 
        var api = new $.fn.dataTable.Api(meta.settings); 
        var td = api.cell({ row: meta.row, column: meta.col }).node();       
        switch (full.status) { 
         case Status.Saved: 
          $(td).addClass("status-saved"); 
          break; 
         case Status.Sent: 
          $(td).addClass("status-sent"); 
          break; 
         default: 
          $(td).addClass("status-saved"); 
        } 
        return full.statusText; 
       case "sort": 
        return full.status; 
       default: 
        return full.statusText; 
      } 
     } 
    } 

답변

0

의 vanillaJS을 사용하는 것입니다. rowCallback에서 DOM 행에 액세스 할 수 있으므로 api 인스턴스를 새로 고칠 필요가 없으며 셀을 조회 할 수 있습니다. 나는 여전히 클래스를 설정하기 위해 jQuery와 addClass를 사용한다. jQuery 대신 일반 바닐라를 사용하여 성능을 더욱 향상 시키려고합니다. @ shyammakwana.me 님의 제안대로

1

하나의 가능성은 어떻게 든 밖으로 api를 얻을 관리하고 td 경우 기능을 렌더링한다는 것입니다. 왜냐하면 무거운 수술처럼 보입니다.

그리고 td을 다음과 같이 설정하면 효과가 있습니다.

var td = $(api.cell({ row: meta.row, column: meta.col }).node()); 

은 더욱 더 당신이 할 수있는 것은 rowCallback이 ( documentation here) 방법은 렌더링 방법보다 더 나은 것을 대신 밖으로 찾을 수 addClass

+0

고마워요! 좋은 제안. 나는 그것이 더 잘 수행 할 것이라고 확신한다. 하지만 테이블 옵션에 연결할 수 있고 DOM 행에 대한 참조를받을 수있는 rowCallback을 찾았습니다. render 콜백과 비슷하지만 api를 새로 고칠 필요가없고 셀을 조회 할 필요가 없습니다. – Andreas