You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Aurelia SlickGrid结合OData时使用gt/le自定义过滤操作符

Aurelia SlickGrid OData请求自定义操作符配置

问题场景

需要在发起OData请求时使用自定义gt/le操作符,替换Aurelia SlickGrid内置默认拼接的eq操作符。
当前使用的列定义配置如下:

{
  id: 'LockoutEndDateUtc', 
  name: 'Status', 
  field: 'LockoutEndDateUtc', 
  minWidth: 85, 
  maxWidth: 95,
  type: FieldType.boolean,
  sortable: true,
  formatter: Formatters.multiple,
  params: { formatters: [this.StatusFormatter, Formatters.checkmark] },
  filterable: true,
  filter: {
    collection: [ 
      { value: 'le ' + (() => {const dt = new Date(); return dt.toISOString().split('.')[0] + "Z";})(), label: 'True' }, 
      { value: 'gt ' + (() => {const dt = new Date(); return dt.toISOString().split('.')[0] + "Z";})(), label: 'False' }
    ],
    model: Filters.singleSelect,
  }
}

当前界面效果:
状态列筛选界面截图
框架自动生成的错误$filter请求参数格式:

$filter=(LockoutEndDateUtc%20eq%20le%202022-06-28T12%3A59%3A25Z)

验证结果:移除参数中自动拼接的%20eq(URL解码后为 eq)后,请求可正常运行。需要实现框架不自动追加eq,直接传递自定义的gt/le操作符。

解决方法

方法1:为下拉选项单独指定操作符(推荐)

不要将操作符拼接在选项的value字段中,改为给每个下拉选项单独配置operator属性,框架识别到选项自带操作符时,会优先使用该配置,不会追加默认的eq。
修改后的filter配置如下:

filter: {
  collection: [
    {
      value: (() => {
        const dt = new Date();
        return dt.toISOString().split('.')[0] + "Z";
      })(),
      label: 'True',
      operator: 'le' // 指定该选项使用le操作符
    },
    {
      value: (() => {
        const dt = new Date();
        return dt.toISOString().split('.')[0] + "Z";
      })(),
      label: 'False',
      operator: 'gt' // 指定该选项使用gt操作符
    }
  ],
  model: Filters.singleSelect,
}

方法2:自定义过滤参数序列化逻辑

如果使用的框架版本不支持选项级operator配置,可以在网格配置的OData后端服务参数中,自定义过滤条件的序列化逻辑,手动跳过默认的eq拼接:

// gridOptions 配置项
backendServiceConfig: {
  service: new OdataService(),
  // 自定义过滤条件拼接规则
  filterSerializer: (filterOptions) => {
    return filterOptions.filters.map(item => {
      // 针对LockoutEndDateUtc字段,直接使用拼接了操作符的搜索值,不追加默认eq
      if (item.field === 'LockoutEndDateUtc') {
        return `${item.field} ${item.searchTerm}`;
      }
      // 其余字段走默认拼接规则
      return `${item.field} ${item.operator || 'eq'} ${item.searchTerm}`;
    }).join(' and ');
  }
}

内容的提问来源于stack exchange,提问作者sb32134

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 13:54:25