【问题标题】:ExtJS 6.2 : creating a custom filter for a gridcolumnExtJS 6.2:为网格列创建自定义过滤器
【发布时间】:2016-12-15 13:59:36
【问题描述】:

我想为我的网格列创建一个自定义过滤器。

我试过这个:

Ext.define('Myapp.grid.filters.filter.Float', {
  extend : 'Ext.grid.filters.filter.Number',
  alias  : ['grid.filter.float'],

  type : 'float',

  config : {
    serializer : function (f) {
      return {
        type     : 'float',
        value    : f.value,
        property : f.property,
        operator : f.operator
      };
    }
  }
});

然后我尝试在我的网格列中使用过滤器:

   {
      header     : 'Foo',
      dataIndex  : 'bar',
      filterable : true,
      filter     : {
        type : 'float'
      }
    }

如何在我的应用程序中创建、添加或注册过滤器到gridfilter-plugin?我真的不明白。

提前致谢

解决办法:

我们使用Ext.grid.filters.filter.Base中的createFilter-function来创建和使用过滤器:

Ext.define('MyApp.foo.bar.FloatFilter', {
  extend : 'Ext.grid.filters.filter.Number',
  alias  : 'grid.filter.float',

  createFilter : function (config, key) {
    config.type = 'float';
    return this.callParent(arguments);
  }

});

【问题讨论】:

    标签: extjs filter grid extjs6


    【解决方案1】:

    要添加新的过滤器类型,您必须定义从 Ext.grid.filters.filter.Base 或其后代扩展的新类(就像您所做的那样)。

    检查此simple example

    此外,您可以检查现有的过滤器代码以了解如何添加自定义菜单或过滤器规则,例如基于Ext.grid.filters.filter.SingleFilterExt.grid.filters.filter.String

    【讨论】:

    • 它正在工作!非常感谢你。所以我做的唯一错误是我指定了错误的命名空间吗?我真的必须在 ext-namespace 中定义一个类才能使其工作吗?有没有办法在我自己的结构/命名空间中创建过滤器并将其手动添加到插件中?
    • 我想你可以,但是你必须重写插件代码来接受类/类名,而不仅仅是输入字符串。实际上,应用程序名称(Myapp)是您的视图、控制器模型和存储的命名空间,而插件使用 Ext 全局对象。
    • 我们找到了解决方案。您可以使用 Ext.grid.filters.filter.Base 中未在其文档中列出的 createFilter-Function,但您可以创建插件使用的过滤器。我会尽快更新我的问题。
    猜你喜欢
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    相关资源
    最近更新 更多