ExtJS如何为自定义网格列的筛选列表值添加对应图标?
可以给GridFilters的列表筛选选项添加对应图标
完全可以实现,只需要在自定义列的filter配置中扩展列表筛选器(ListFilter)的模板,让每个筛选选项渲染时带上对应图标即可,和单元格渲染逻辑保持一致。
实现步骤
在你的OrderStatusColumn定义中,把原来简单的filter: 'list'替换为完整的筛选器配置,通过itemTpl指定每个选项的渲染模板,嵌入和单元格相同的图标逻辑:
Ext.define('OrderStatusColumn', { extend: 'Ext.grid.column.Column', alias: 'widget.OrderStatusColumn', text: 'Status', // 扩展list filter的配置,添加自定义模板 filter: { type: 'list', // 自定义选项渲染模板,根据value匹配对应图标 itemTpl: ` <tpl switch="value"> <tpl case="'Draft'"> <i class="fa-regular fa-sticky-note x-font-awesome-family-regular color-main-base" style="font-size: 18px;margin-right:5px;"></i> <tpl default> <i class="fa-regular fa-question-circle x-font-awesome-family-regular color-main-base" style="font-size: 18px;margin-right:5px;"></i> </tpl> </tpl> {text} ` }, renderer: function(value, metaData) { metaData.style = "text-align: left;"; var columnInstance = metaData.column; var processValue = columnInstance.resolveLookupValue(columnInstance, value, metaData.record); var tooltipText = Ext.util.Format.htmlEncode(processValue); metaData.tdAttr = 'data-qtip="' + tooltipText + '"'; var iconHtml = ''; switch (value) { case 'Draft': iconHtml = '<i class="fa-regular fa-sticky-note x-font-awesome-family-regular color-main-base" style="font-size: 18px;margin-right:5px;"></i>'; break; default: iconHtml = '<i class="fa-regular fa-question-circle x-font-awesome-family-regular color-main-base" style="font-size: 18px;margin-right:5px;"></i>'; break; } return iconHtml + '<span class="span-overflow-hide" style="display: inline;">' + processValue + '</span>'; } });
关键说明
itemTpl是ExtJS列表筛选器用来渲染每个选项的模板,使用switch语法根据选项的value匹配对应的图标,和单元格渲染的逻辑完全对齐。- 如果你的筛选选项文本是通过
resolveLookupValue处理后的显示文本,确保筛选器的options配置中已经包含正确的value和text(如果是自动从列数据获取选项,通常会自动对应)。 - 模板中的图标样式类和单元格里的保持一致,确保视觉统一。
内容的提问来源于stack exchange,提问作者AnthonyDa
相关产品推荐
相关产品推荐

