ag-grid:如何在翻译后对集合过滤值进行排序,同时保持原始(未翻译)过滤值

问题描述 投票:0回答:1

我在使用 ag-grid 和设置过滤器时遇到问题。

  • set-filter 的values 是从后端接收的枚举(字符串)列表
  • 我们使用valueFormatter将这些枚举值翻译
  • 为不同的语言
  • 现在我们希望集合过滤器根据翻译文本进行排序

这是我们过滤器参数的快照:

filterParams: {
   values: this.filterValuesFromBackend,
   valueFormatter: (params: ValueFormatterParams) => this.translate(params.value)
}

据我所知排序是使用未格式化的值(枚举值)完成的,之后发生值格式化(此处:翻译)。

重要提示:我们的表是服务器端表,我们在数据库查询中使用过滤器。 仅仅使用已经翻译的文本作为过滤器集值是没有解决方案的:我们需要来自集过滤器的原始枚举值用于之后的数据库过滤。

我们目前的解决方法是使用一个比较器,它处理许多额外的翻译只是为了排序:

filterParams: {
   ...
   comparator: (a: string, b: string) => {
               const textA = this.translate(a);
               const textB = this.translate(b);
               return textA.localeCompare(textB);
   }
},

这是一个简单的例子:

  • 过滤值:自行车、汽车、公共汽车
  • 前端显示翻译和排序的值:
    • 英文:bike, bus, car(字母顺序)
    • 德文:Auto, Bus, Fahrrad(字母顺序,英文:car, bus, bike)
    • 法文:bus, vélo, voiture(按字母顺序,英文:bus, bike, car)
  • 后端收到“红色”、“绿色”和“蓝色”用于数据库过滤

我错过了什么吗?使用 valueFormatte 是否适合翻译任务?

ag-grid
1个回答
0
投票

我面临着同样的问题。

对于这种特殊情况,我只是尝试将此列从 valueFormatter 切换到 valueGetter,它似乎可以解决问题。

我不需要原始数据,所以我很好。如果您确实需要它,我想您可以使用带有原始数据的第二个隐藏列。

© www.soinside.com 2019 - 2024. All rights reserved.