4

我有一个使用 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

4 回答 4

4

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

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

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

2) 为了初步过滤数据,使用 store 中的 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 ';
        });
    }
});
于 2013-06-27T23:09:31.780 回答
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
        }
}
于 2012-05-25T19:46:49.073 回答
1

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

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()。然后它只会在第一次加载网页时显示大小等于“小”的记录。干杯!

于 2013-07-27T04:30:40.200 回答
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);
},
于 2015-08-26T12:24:56.933 回答