0

Pivot.jsライブラリを使用して、データにピボットビューを作成します。ライブラリはjquery.dataTablesを使用して、最終的なピボットテーブルを表示します。残念ながら、Pivo​​t.jsには、並べ替えの際のnull値に関する問題があります。

次の設定を使用すると、 github-siteでエラーを簡単に確認できます。

フィルターフィールド:イングルウッド

行ラベルフィールド: last_name

列ラベルフィールド: invoice_yyyy

要約フィールド: billed_amount

次に、「2010」列で並べ替えます。結果は次のようになります。 並べ替えエラーの例

一部の行には(論理的に)null値が含まれ、''で埋められているため、列は文字列のようにソートされているようです。並べ替えは、各行に値を含む完全な列に対して機能します。2010年の列は完全ではなく、$ 90.10!<$ 850.00

Pivot.jsライブラリ内のコードを変更せずにこのエラーを回避するにはどうすればよいですか?ありがとうございました。

4

1 に答える 1

1

aTypesデータテーブルに新しい並べ替え関数のセットを提供してから、対応するデータ型(フォーマットされた番号など)を自動的に割り当てる関数を追加する必要があります-http: //datatables.net/release-datatables/examples/plug-ins/ sort_plugin.html

ここで注意が必要なのは、jquery_pivot.js(pivot.jsに付属&nbsp;)がnull値に改行しないスペースポイント()を使用することです(https://github.com/rjackson/pivot.js/blob/master/jquery_pivot.js #L347)。jquery_pivot.jsは単なる推奨UI実装であり、アプリに合わせて自由に変更できるようにすることをお勧めします。ただし、変更したくない場合は、2つの潜在的に望ましくない動作が残ります。

  1. dataTablesの自動型検出は、を介してトリップし、&nbsp;観察したように、列を並べ替えの英数字として扱います。
  2. 数値の並べ替えを検出する場合でも、nullは通常、セットの最小値または最大値として扱われます。私のアプリケーションでは、このNULLS LASTアプローチを好みます(つまり、昇順/降順の並べ替え順序に関係なく、常にテーブルの最後に表示されます)。

私の解決策は最も洗練されたものとはほど遠いですが、ここに私のコードがあります:

ソート関数:

jQuery.extend( jQuery.fn.dataTableExt.oSort, {
    "formatted-num-pre": function ( a ) {
        a = (a==='&nbsp;') ? NaN : a.replace( /[^\d\-\.]/g, "" );
        return parseFloat( a );
    },
    "formatted-num-asc": function ( a, b ) {
        if(isNaN(a)) return 1;
        if(isNaN(b)) return -1;
        return a-b;
    },
    "formatted-num-desc": function ( a, b ) {
        if(isNaN(a)) return 1;
        if(isNaN(b)) return -1;
        return b-a;
    }});

タイプ検出:

jQuery.fn.dataTableExt.aTypes.unshift(
  function (data) { 
    return (data.charAt(0)==='$'||data==='&nbsp;')?'formatted-num':null; 
  });

それが役に立てば幸い!

于 2013-07-15T15:37:32.173 に答える