gpt4 book ai didi

extjs - 通过函数以编程方式应用网格过滤器

转载 作者:行者123 更新时间:2023-12-04 13:12:00 24 4
gpt4 key购买 nike

使用Ext.ux.grid.FiltersFeature,我具有远程过滤器,并且我试图编写一个函数以编程方式在网格列上应用日期过滤器(而不是单击列标题中的过滤器下拉菜单)。我第一次运行该功能时,网格存储将在没有过滤器的情况下重新加载。当我第二次运行该函数时(此后每次都运行),该函数运行正常,商店将重新加载过滤器。这是我拥有的功能的要点:

// a filter object for testing
aFilter = {type: 'date', field: 'a_date_field', comparison: 'gt', value: '2012-03-08 00:00:00'}

var grid = Ext.create('Ext.grid.Panel', {
store: store,
features: [{
ftype: 'filters',
}],
columns[{
header: 'ID',
dataIndex: 'id',
itemId: 'id',
width: 40,
}, {
xtype: 'datecolumn',
header: 'Date',
dataIndex: 'a_date_field',
itemId: 'a_date_field',
width: 75,
format:'j-M-Y',
filterable: true
}],
listeners: {
'afterrender': function() {

// Need to create the filters as soon as the grid renders
// rather than waiting for the user to click on the header
grid.filters.createFilters();
}
},
bbar: [{
text: 'Do a filter',
handler: function() {

// get the filter that is attached to the grid
var gridFilter = grid.filters.getFilter(aFilter.field);

// have to do this to create a menu for this filter
gridFilter.init({dataIndex: aFilter.field, type: aFilter.type, active: true});

// if this column is a date filter column
if (gridFilter.type == 'date') {
var dateValue = Ext.Date.parse(aFilter.value, 'Y-m-d H:i:s');
if (filter.comparison == 'gt') {
gridFilter.setValue({after: dateValue});
} else {
gridFilter.setValue({before: dateValue});
}
}
}
}
});

我还发现,如果我在运行该功能之前单击任何网格标题菜单,则该功能将首次起作用。

我一直在尝试找出对网格所做的更改,这些更改会使过滤器在第一次尝试失败后起作用,或者在任何网格标题上单击以使其起作用。但是我添加的任何内容似乎都无法修复它,因此它将在第一次运行。有人成功实现了吗?

最佳答案

我有解决方法:

bbar: [{
text: 'Do a filter',
handler: function() {
var grid = this.up('grid');
var dateValue = Ext.Date.parse(aFilter.value, 'Y-m-d H:i:s');
var value = aFilter.comparison == 'gt' ? {after: dateValue} : {before: dateValue};

var gridFilter = grid.filters.getFilter(aFilter.field);

if (!gridFilter) {
gridFilter = grid.filters.addFilter({
active: true,
type: aFilter.type,
dataIndex: aFilter.dataIndex,
});

gridFilter.menu.show();
gridFilter.setValue(value);
gridFilter.menu.hide();
} else {
gridFilter.setActive(true);
}

Ext.Function.defer(function(){
gridFilter = grid.filters.getFilter(aFilter.field);
gridFilter.setValue(value);
}, 10);
}
}]

如您所见,我实际上两次应用了过滤器。

关于extjs - 通过函数以编程方式应用网格过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9629531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com