请提供一个示例,说明如何基于列的格式化文本而不是原始值创建 excelFilter 过滤器。目前,excelFilter 基于原始值进行过滤,这会导致过滤器的多选列表中出现重复项。我们知道 excelFilter 基于 Filter UI,如下所述:https://docs.webix.com/desktop__filter.html
了解您正在使用的columnConfig 将有所帮助。 例如,是否提供“选项:[]”来将原始值与显示相关联?
但是由于您根本没有任何提示,因此我们要做的就是:将原始值复制到 fieldName_ov 并将显示值放入网格实际显示的数据字段中。
这个 typescript 函数为我们完成了繁重的工作。 您会注意到,我们实际上创建了数据的 _dv 和 _ov “副本”,因此我们可以方便地使用这两个版本。 具有大约 5000 条记录的网格的性能不是问题。
export function propagateDisplayValues<T extends { '^DVPropagated'?:boolean, [key: string]: any; }>(data: T[]): T[] {
let isFirstDataRow: boolean = true;
data.forEach((element) => {
if (isFirstDataRow) {
if (DVPropagatedFlagName in element && element[DVPropagatedFlagName]) {
//tempting to return here if already true? but not a good idea for diffGram-based grids
//return data;
}
else element[DVPropagatedFlagName] = true;
isFirstDataRow = false;
}
Object.keys(element).forEach((key:string ) => {
const dvName = `${key}_dv` as keyof T;
const ovName = `${key}_ov` as keyof T;
if (dvName in element) {
if (!(ovName in element)) element[ovName] = element[key];
element[key as keyof T] = element[dvName] ;
}
});
});
return data as T[];
}