2017-11-13 11 views
0

jquery DataTablesを使用して非常に満足していますが、パフォーマンスを向上させる必要がある状況が1つあります。私は、データに応じてセルのクラスを更新しています。これを行うには、私はレンダリング関数を使用して、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(documentation here)メソッドは、renderメソッドよりも優れていること。分かりましたrowCallbackでは、DOM行にアクセスでき、apiインスタンスを新規に作成してセルをルックアップする必要はありません。私はまだjQueryとaddClassを使ってクラスを設定しています。 jQueryの代わりにプレーンなバニラを試して、パフォーマンスをさらに向上させようとします。 @ shyammakwana.meの示唆通り

1

一つの可能​​性は、あなたが何らかの形でレンダリングする機能のうち、apitdを取得するために管理する場合ということです。それは重い操作のように見えるので。

となります。tdとすると、おそらく動作します。また、より多くのあなたが何ができるか

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

代わりaddClass

+0

ありがとう!良い提案。私はそれがより良くなると確信しています。しかし、テーブルオプションにアタッチしてDOM行への参照を受け取ることができるrowCallbackが見つかりました。レンダリングコールバックに似ていますが、apiを新規に作成してセルをルックアップする必要はありません。 – Andreas

関連する問題