ExtJS 4将自定义过滤器添加到使用重新配置方法的GridPanel

时间:2014-04-09 23:08:02

标签: javascript extjs filter grid extjs4

我正在尝试使用我需要为网格实现的功能来解决问题。这个网格应该使用从“Ext.ux.grid.FiltersFeature”扩展的自定义“过滤器”,这个组件工作正常,因为它适用于我实现的其他网格。问题是我现在要实现的网格,不会像我之前实现的那样在第一时刻加载列;该网格有一个控制器,它使用“重新配置”方法根据“存储”创建列。

例如:

grid.reconfigure(store, cols);

我见过很多关于如何添加单个过滤器等的示例,但是他们使用的是"ftype: "filters",我需要专门使用我的"ftype: mycustomfilter"。我怎么能这样做呢?我尝试了一切,但似乎没有任何工作,我对此感到困惑。

以下是我的一些代码:

控制器中的部分代码:

 if (refreshGrid) {
        var cols = this.createGridColumns();
        //This is the method that loads my column based on the store 
        //(which I retrieve from Ajax request)
        grid.reconfigure(store, cols);
        oldStore.destroyStore();
    } else {
        this.mergeFn.call(this, values, store);
        grid.view.refresh();
    }

我尝试做的是在重新配置网格后添加功能:

grid.reconfigure(store, cols);
//Then I add this portion of code:
grid.features = [{
  ftype: 'customfilterfeature',
  autoReload: false,
  local: true,
  filters: [{type: 'list', dataIndex: 'activity'},
            {type: 'list', dataIndex: 'datetime'}]  
  }]

有没有人知道如何实现这一目标?因为这根本不起作用,所以不显示过滤器。任何帮助将非常感激。提前谢谢。

1 个答案:

答案 0 :(得分:1)

我们必须在几个网格上执行此操作。

我们从Ext.ux.grid.filter.Filter扩展,然后在列的基础上使用这些过滤器,而不是网格本身。这样,每列可以指定他们想要的过滤器,每次重新配置网格时都会更改。

只需要在控制器中使用过滤器类扩展,您就可以这样使用它:

var columnsDef: [
    { text: 'Column Name', dataIndex:'foo', filter: { type: 'yourCustomFilterAlias'}},
    ...
];

grid.reconfigure(store, columnsDef);

之后,只需覆盖自定义Filter类中的正确方法即可。

希望这会有所帮助。