我有一个使用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'
}]
答案 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);
},