2017-12-06 1 views
0

Ich brauche Hilfe bei der Verwendung eines benutzerdefinierten Spaltenfilters für die Verarbeitung von JS-Objekten.Benutzerdefinierter Spaltenfilter für eine formatierte Spalte

Ich habe eine slickgrid Tabelle, wo die Werte in einer Spalte sind JS Objekt:

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

ich einen benutzerdefinierten Formatierer verwenden Sie das Objekt in einen String zu zerschlagen:

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

die in slickgrid zeigt als

Batman, Robin 

meine slickgrid optionen verwenden gridmenu und aktiviert spaltenfilterung:

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

My columnDef ermöglicht Filterung für diese Spalte:

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

Alles funktioniert, wenn der Wert in der Zelle ein String ist, aber die Filter funktionieren nicht, wenn die Zelle ein Objekt ist. Ich nehme an, der Filter sucht den vorformatierten Wert.

Gibt es eine Möglichkeit, die Spalte mit einer benutzerdefinierten Filterfunktion zu versehen, die weiß, wie das JS-Objekt nach der Abfragezeichenfolge zu durchsuchen ist? Zum Beispiel, wenn ich nur den JSON.stringify (Wert) suchen könnte, wäre das gut genug.

Alternativ beschreibt this answer, wie ich den formatierten Text als eine andere Zeichenfolge Eigenschaft in DataContext speichern konnte. Wenn ich das tue, wie gebe ich an, welche Eigenschaft gefiltert werden soll, da es eine andere Eigenschaft als das Spaltenfeld ist?

Antwort

0

Ich habe einen Workaround gefunden.

Vorprozess meine Daten, ruft JSON.stringify auf alle Werte, die Objekte sind:

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; 
} 

Da ist in meinem Formatierer, ich die json analysieren, bevor die Formatierung:

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

Dies ermöglicht die Standard string filter zum Suchen der stringify'd JSON

+0

froh, dass Sie es aussortiert haben. Es gibt einige Dinge, die ich hier nicht verstehe. würde ein vollständiges Beispiel brauchen, um mehr Hilfe zu sein. –

Verwandte Themen