Tabulator tips

第18回 カスタム関数の使い方

2020.03.25

今回は tips ではなく公式ドキュメントから抜粋になります。 カスタム関数の使い方や引数の備忘録として掲載しました。

目次

Formatter (公式ホームページCustom Formatters)

組み込みの formatter と同様にカスタム関数を使用して formatter を定義できます。

フォーマッタ関数の引数は、フォーマットされるセルオブジェクトと列定義のformatterParamsオプションを取ります。

関数はセルの内容、セルのテキスト値、有効なHTMLまたはDOMノードのいずれかを返す必要があります。

formatter:function(cell, formatterParams, onRendered){
    // cell-セルデータ
    // formatterParams-列に設定されたパラメーター
    // onRendered-formatterがレンダリングされたときに呼び出す関数

    return "Mr" + cell.getValue(); //セルの内容を返します;
}

CelClick (公式ホームページCell Callbacks)

cellClickコールバックは、ユーザーがセルを左クリックしたときにトリガーされます。列定義オブジェクトのオプションを使用して、列ごとに設定できます。

cellClick:function(e, cell){
    //e - クリックイベントオブジェクト
    //cell - cellデータ
}

Sorter (公式ホームページCustom Sorters)

sorter オプションでカスタムソーター関数を定義できます。

sorter:function(a, b, aRow, bRow, column, dir, sorterParams){
    // a、b-比較される2つの値
    // aRow、bRow-比較される値の行オブジェクト(ソートのために行データの追加フィールドにアクセスする必要がある場合に使用)
    // column-ソートされる列の列データ
    // dir-ソートの方向( "asc"または "desc")
    // sorterParams-列定義配列のsorterParamsオブジェクト
    return a - b; // 2つの値の差を返す必要があります
}

Calc (公式ホームページCustom Caluculation Functions)

列で独自の計算をする場合、カスタム関数をtopCalcまたはbottomCalcオプションのいずれかに渡すことができます。

// 18歳以上のユーザー数をカウント
var adultCalc = function(values, data, calcParams){
    // values-列値の配列
    // data-すべてのテーブルデータ
    // calcParams-列定義オブジェクトから渡されたパラメーター

    var calc = 0;
    values.forEach(function(value){
        if(value > 18){
        calc ++;
        }
    });
    return calc;
}
//in your column definition for the column
{title:"Age", field:"age", topCalc:adultCalc},

Row Formatter(公式ホームページRow Formatting)

Tabulator は rowFormatter オプションを使用して行レベルのフォーマッターを定義することもできます。これにより、含まれるデータに基づいてテーブルの各行を変更できます。

この関数はフォーマットされる行の Row データを引数に取ります。 次の例では、行のcol値が「青」の場合、行の背景色を青に変更します。

rowFormatter:function(row){
    //row - row component
    var data = row.getData();
    if(data.col == "blue"){
        row.getElement().style.backgroundColor = "#A6A6DF";
    }
}

Filter(公式ホームページCustom Filter Functions)

複雑なフィルターを実行する場合は setFilter メソッドにコールバック関数を渡します。2番目の引数はパラメーターオブジェクトです。

function customFilter(data, filterParams){
    // data - フィルタリングされる行のデータ
    // filterParams-フィルターに渡されるparamsオブジェクト

    // フィルターが有効な場合はtrueを返します。
    return data.name == "bob" && data.height < filterParams.height;
}
table.setFilter(customFilter, {height:3});

Validate(公式ホームページCustom Validateor Functions)

独自の Validate 関数を追加する場合は、validatorプロパティに関数を設定します。 値が Validate にパスした場合はtrueを返し、失敗した場合はfalseを返す必要があります。

// 指定された除数で割り切れる場合、false を返す
var noDivide = function(cell、value、parameters){
    // cell-編集されたセルのセルコンポーネント
    // value-セルの新しい入力値
    // parameters-バリデーターで渡されたパラメーター

    // devisorで割り切れる場合、0:false を返す
    return value%parameters.divisor;
}
{title:"Age",field:"age",editor:"input",
    validator:[{type:noDivide, paramaters:{divisor:5}}]
}

Editor(公式ホームページCustom Editors)

別のタイプのエディターが必要な場合は、カスタムエディター機能をeditor オプションに渡すことができます。 この関数は5つの引数を取ります。

  1. 編集中のセルの Cellコンポーネント
  2. セルがレンダリングされたときに呼び出す関数(要素が表示された後にフォーカスを設定したり、ディスプレイを整頓するために使用できる)。
  3. ユーザーがセルに新しいデータを正常に入力したときに新しい値を返すために呼び出す関数。
  4. ユーザーが編集を中止した場合に呼び出す関数。
  5. editorParams 列定義プロパティから渡されるパラメータ。

カスタムエディター関数は、セルに挿入されるエディターのDOMノードを返す必要があります。または、編集を中止する場合はfalseの値を返す必要があります。

var dateEditor = function(cell, onRendered, success, cancel, editorParams){
    // cell-編集可能なセルのセルコンポーネント
    // onRendered-エディターがレンダリングされたときに呼び出す関数
    // success-正常に更新された値をTabulatorに渡すために呼び出す関数
    // cancel-編集を中止して通常のセルに戻るために呼び出す関数
    // editorParams-editorParams列定義プロパティに渡されるparamsオブジェクト

    //create and style editor
    var editor = document.createElement("input");

    editor.setAttribute("type", "date");

    //create and style input
    editor.style.padding = "3px";
    editor.style.width = "100%";
    editor.style.boxSizing = "border-box";

    //Set value of editor to the current value of the cell
    editor.value = moment(cell.getValue(), "DD/MM/YYYY").format("YYYY-MM-DD")

    //set focus on the select box when the editor is selected (timeout allows for editor to be added to DOM)
    onRendered(function(){
        editor.focus();
        editor.style.css = "100%";
    });

    //when the value has been set, trigger the cell to update
    function successFunc(){
        success(moment(editor.value, "YYYY-MM-DD").format("DD/MM/YYYY"));
    }

    editor.addEventListener("change", successFunc);
    editor.addEventListener("blur", successFunc);

    //return the editor element
    return editor;
};

//in your column definition for the column
{title:"Birthday", field:"dob", editor:dateEditor}}

以上です。

著者プロフィール

naka

すきなコマンドは awk と bc です。なにかを計算する時、awk か bc を使います。

記事一覧Index