如何设置Ext Grid Filter Default?

时间:2012-05-24 18:59:54

标签: extjs filter grid

我有一个使用ext 3.4网格过滤器插件的可排序网格。我想默认活动列来过滤真值。需要非活动记录的用户可以删除过滤器。如何指定默认过滤器列和值?

提前致谢!

colModel: new Ext.grid.ColumnModel({
    defaults: {
        sortable: true
        // How do I specify a default filter value
        //
        // Only show active records unless the user changes the filter...
    },
    columns: [{
        dataIndex:'f_uid',
        id:'f_uid',
        header:'ID',
        hidden:true
    }, {
        dataIndex:'f_name',
        id:'f_name',
        header:'Name',
    }, {
        xtype:'booleancolumn',
        dataIndex:'f_active',
        id:'f_active',
        header:'Active',
        filterable:true,
        trueText:'Active',
        falseText:'Inactive'
    }]

4 个答案:

答案 0 :(得分:4)

我意识到这是一个老问题,但我花了一段时间才找到解决方案,因此我想我会分享。

1)可以使用过滤器中的value属性设置过滤器。

filter: {
          type: 'LIST',
          value: ['VALUE TO FILTER']
        }

2)为了最初过滤数据,请使用商店中的filterBy()方法。这可以在onRender事件处理程序中定义。

this.getStore().load({
    scope:this,
    callback: function() {
        // filter the store 
        this.getStore().filterBy(function(record, id) {
            // true will display the record, false will not
            return record.data.DATA_TO_FILTER == 'VALUE TO FILTER ';
        });
    }
});

答案 1 :(得分:3)

答案在Filter.js源代码中。列定义中的过滤器对象可用于配置默认行为。

}, {
        xtype:'booleancolumn',
        dataIndex:'f_active',
        id:'f_active',
        header:'Active',
        trueText:'Active',
        falseText:'Inactive',
        filterable:true,
        filter: {
            value:1,    // 0 is false, 1 is true
            active:true // turn on the filter
        }
}

答案 2 :(得分:1)

我遇到了同样的问题,我发现@ John的答案是正确的,我可以使用示例http://dev.sencha.com/deploy/ext-4.0.0/examples/grid-filtering/grid-filter-local.html,对于grid-filter-local.js,只需添加如下代码: / p>

grid.getStore().load({
    scope:this,
    callback: function() {
        // filter the store 
        grid.getStore().filterBy(function(record, id) {
            // true will display the record, false will not
            return record.data.size === 'small';
        });
    }
});
在原始代码 store.load()之前

,并擦除 store.load()。 然后它只会在第一次加载网页时显示大小等于'小'的记录。干杯!

答案 3 :(得分:0)

我已经创建了一个通用助手类,允许您在列定义中设置任何默认值。 https://gist.github.com/Eccenux/ea7332159d5c54823ad7

这适用于远程和静态存储。请注意,这也适用于filterbar插件。

所以你的列项类似于:

{
    header: 'Filename',
    dataIndex: 'fileName',
    filter: {
        type: 'string',
        // filename that starts with current year
        value: Ext.Date.format(new Date(), 'Y'),
        active:true
    }
},

然后在你的窗口组件中添加如下内容:

initComponent: function() {
    this.callParent();

    // apply default filters from grid to store
    var grid = this.down('grid');
    var defaultFilters = Ext.create('Ext.ux.grid.DefaultFilters');
    defaultFilters.apply(grid);
},