2017-12-06 3 views
0

JSオブジェクトを処理するためのカスタム列フィルターを使用すると助けが必要です。フォーマットされた列のカスタム列フィルター

// convert [{id:string, text:string}...] to string 
const optionFormatter: Formatter = (row, cell, value, columnDef, dataContext: any) => 
    value ? value.map(o => o.text).join(', ') : ''; 

slickgridに表示されます。私は、文字列にオブジェクトを粉砕するためのカスタムフォーマッタを使用

[ 
    { id: "1234", text: "Batman"}, 
    { id: "2345", text: "Robin"} 
] 

は、私は1つの列の値は、JSオブジェクトですslickgridテーブルを持っていますas

Batman, Robin 

私のslickgridオプションは、グリッドメニューを使用し、列フィルタリングを有効にします。

this.gridOptions = { 
    enableGridMenu: true, 
    enableFiltering: true, 
    enableAutoResize: true, 
    enableColumnReorder: true 
}; 

マイcolumnDefは、この列のフィルタリングを可能にします。

{ 
    id: 'owners', 
    name: 'Owners', 
    field: 'owners', 
    sortable: false, 
    formatter: optionFormatter, 
    filterable: true 
} 

セルの値が文字列であればすべてが動作しますが、セルがオブジェクトである場合、フィルタは機能しません。私はフィルタが事前にフォーマットされた値を検索していると仮定します。

クエリ文字列のJSオブジェクトを検索する方法を知っているカスタムフィルタ関数を列に提供する方法はありますか?たとえば、JSON.stringify(value)を検索するだけでも十分です。

また、this answerは、フォーマッタを使用して書式設定されたテキストをdataContextの異なる文字列プロパティとして格納する方法について説明しています。その場合、フィルタリングするプロパティを列フィールドとは異なるプロパティとして指定するにはどうすればよいでしょうか?

答えて

0

回避策が見つかりました。オブジェクトであるすべての値にJSON.stringifyを呼び出す

前処理私のデータを、:

flattenFeature(f: Feature): any{ 
    var res = {}; 
    for (var prop in f) { 
    res[prop] = (typeof f[prop] === 'object') ? JSON.stringify(f[prop]) : f[prop]; 
    } 
    return res; 
} 

はその後、私のフォーマッタでは、私はフォーマットする前に、JSONをパース:

// convert [{id:string, text:string}...] to string 
const optionFormatter: Formatter = (row, cell, value, columnDef, dataContext) => 
    value ? JSON.parse(value).map(o => o.text).join(', ') : ''; 

これは標準を可能に文字列フィルタを使用してstringifyを検索するJSON

+0

うれしいです。私がここで理解していないことがかなりあります。より多くの援助を得るためには完全な例が必要です。 –

関連する問題