2017-08-10 3 views
1

レンダリング機能が、自分の列の1つに対するDataTableの並べ替え能力を損なうようです。この列には、「コーパスランク」と呼ばれるものが含まれています。コーパスランクはすべて整数ですが、インタフェース目的のために、コーパスランクが4000の値を超えたときを検出するレンダリング関数を作成しました。もしそうなら、レンダリング関数を使ってコーパスランクエントリを珍しいという文字列に変更します。DataTables API:Datatablesはレンダリング(特定の要素に文字列を挿入する)によって整数の列を並べ替えることができません。

これは、誰かが列のヘッダーをクリックしてコーパスランクでソートしようとすると、コーパスランクは整数ではなく文字列のように扱われるからです。レンダリング関数を削除した場合、実際には列は文字列ではなく整数としてソートされます。

     columns.push({ 
       "name": $(this).data("fieldname"), 
       "data": "fields."+$(this).data("fieldname"), 
       /*"render": function(data, type, full, meta) { 
        if (data > 4000) { 
        return "rare"; 
        } else { 
        return data; 
       } 
       },*/ 
       "visible": $(this).data("visible"), 

私は、DataTableのは、通常、それらのデータの種類を使用して列をソートすることを認識しています...しかし、これは整数と文字列の両方を持つ列です。これを解決するには何ができますか?

答えて

0

あなたは単なる文字列"rare"は、それをソートしませを示しする必要があります。今

render: function(data, type, full, meta) { 
    if (type == 'display') { 
    if (data > 4000) { 
     return "rare" 
    } 
    } 
    return data 
}, 

"rare"のみを表に示されているが、テーブルがソートやフィルタリングされたときに、元の値が使用されます:それは異なる目的のために別の値を返すために、あなたにoppurtunityを与える、typeのparamを見てください。

+0

これは機能しました。これはより速い修正の1つと思われますが、正確に 'タイプ'が何であるか、またその文字列値が「ディスプレイ」と等しいことをどのように知っていたかを知りたいと思います。 ドキュメントを検索しているときにこれを見つけることができませんでしたが、しばらく経っていますが、私に与えることができるリードはありますか? –

+0

@ByronSmithさて、 "* Look at ... *"はドキュメントを見ているヒントでした:)ここは** https://datatables.net/reference/option/columns.render**になりますすべてのタイプの可能性** https://datatables.net/manual/data/orthogonal-data** – davidkonrad

+0

ああ。ダム私。私はちょうどそれを検索し、情報を見つけるのに困っていた。 –

0

もう1つの列isRareを追加できますか? 4000以下のすべてのランクについては0を、4000以上のランクについては1を維持しますか?そのような列を持つことを許可しない他の制約がある場合を除き、それを行う必要があります。

0

html5-data-attributescolumns.createdCellの並べ替えに使用できます。

以下はコード例です。私は上記のコードに基づいて、それを作成しました:

"data": "fields."+$(this).data("fieldname"), 
"render": function(data, type, full, meta) { 
       if (data > 4000) { 
       return "rare"; 
       } else { 
       return data; 
       } 
      }, 
"createdCell": function (td, cellData, rowData, row, col) { 
        $(td).attr('data-order', cellData); 
       } 
0

私が過去に使用したオプションの1つは、refタグでスパン内のセルコンテンツをラップし、ref値を比較するカスタムソートタイプを追加することです(現在の優先メソッドではない可能性があります)

$.fn.dataTableExt.oSort['ref-numeric-asc'] = function (a, b) { 
 
\t var x = a ? a.match(/ref=['"]*(-?[0-9\.]+)/)[1] : "0"; 
 
\t var y = b ? b.match(/ref=['"]*(-?[0-9\.]+)/)[1] : "0"; 
 
\t x = parseFloat(x); 
 
\t y = parseFloat(y); 
 
\t return ((x < y) ? -1 : ((x > y) ? 1 : 0)); 
 
}; 
 
$.fn.dataTableExt.oSort['ref-numeric-desc'] = function (a, b) { 
 
\t var x = a ? a.match(/ref=['"]*(-?[0-9\.]+)/)[1] : "0"; 
 
\t var y = b ? b.match(/ref=['"]*(-?[0-9\.]+)/)[1] : "0"; 
 
\t x = parseFloat(x); 
 
\t y = parseFloat(y); 
 
\t return ((x < y) ? 1 : ((x > y) ? -1 : 0)); 
 
};

あなたは、その列のソートタイプとして 'REF-数値' を指定することができます。

関連する問題