我使用extJS 5.1.0并且我在网格上遇到问题:我想用列表中的searchfield和gridfilters插件过滤数据。
当我只使用gridfilters插件时,它可以工作。 当我只使用搜索字段时,它也可以。
但是当我同时使用它们时,列过滤器无法正常工作:文本在"查询"中传递。参数而不是"过滤器"参数,所以它像搜索字段一样过滤网格。
这是我的观点:
Ext.define('OP.view.GridProduits', {
extend: 'Ext.grid.Panel'
,alias: 'widget.gridproduits'
,itemId:'grid'
,forceFit: true
,layout: {
type: 'fit'
}
,cls: 'x-tree-noicon'
,rowLines:true
,stateful:true
,stateId:'gridproduitsstate'
,title:TradOP9
,id_outil:0
,initComponent: function() {
var me = this;
var produits_store = Ext.create('OP.store.ProduitsStore');
if(me.id_outil && me.id_outil > 0) {
produits_store.proxy.extraParams.id_outil = me.id_outil
}
me.store = produits_store;
this.dockedItems = [
{
xtype: 'pagingtoolbar'
,store: me.getStore()
,dock: 'bottom'
,displayInfo: true
},
{
xtype: 'toolbar'
,dock: 'top'
,itemId: 'toptoolbar'
,items: [
TradOP27 + ' :'
,{
xtype:'searchfield'
,store:me.store
,width: 200
,id:'searchField'+me.id_outil
,itemId:'searchField'+me.id_outil
,name:'searchField'+me.id_outil
}
]
}
];
this.columns = [
{
xtype: 'actioncolumn'
,minWidth:40
,maxWidth:40
,groupable:false
,items: [
{
tooltip: TradOP21
,itemId: 'row-open'
,action: 'open'
,getClass: function(v, m, rec, row, col, store) {
return 'icon-zoom';
}
,iconCls: 'icon-16'
,handler: function(grid, rowIndex, colIndex, item, e, record) {
this.up('panel').fireEvent('itemopenbuttonclick', grid, record);
}
}
]
}
// ID
,{
xtype: 'gridcolumn'
,dataIndex: 'id'
,text: 'ID'
,minWidth:40
,maxWidth:40
,groupable:false
,filter:{
type: 'numeric'
,dataIndex: 'PRODUIT.id'
}
}
// Code
,{
xtype: 'gridcolumn'
,dataIndex: 'ref_interne'
,text:TradOP12
,flex:1
,groupable:true
,sortable:true
,itemId:'testtest'
,filter:{
type: 'string'
,dataIndex: 'PRODUIT.ref_interne'
}
}
// Nom
,{
xtype: 'gridcolumn'
,text:TradOP13
,dataIndex: 'libelle'
,flex:1
,groupable:true
,sortable:true
,filter:{
type: 'string'
,dataIndex: 'PRODUIT.libelle'
}
}
// Famille
,{
xtype: 'gridcolumn'
,dataIndex: 'famille'
,text:TradOP14
,groupable:true
,sortable:true
,flex:1
,filter:{
type: 'string'
,dataIndex: 'PRODUIT.GpProduit'
}
}
// Outil
,{
xtype: 'gridcolumn'
,dataIndex: 'id_outil'
,text:TradOP15
,groupable:true
,sortable:true
,flex:1
,filter:{
type: 'string'
,dataIndex: 'PRODUIT.id_outil'
}
,hidden:me.id_outil ? true : false
}
// Client
,{
xtype: 'gridcolumn'
,dataIndex: 'nom_client'
,text:TradOP16
,groupable:true
,sortable:true
,flex:1
,filter:{
type: 'string'
,dataIndex: 'client.nom'
}
}
// Plan
,{
xtype: 'gridcolumn'
,dataIndex: 'plan'
,text:TradOP17
,groupable:true
,sortable:true
,flex:1
,filter:{
type: 'string'
,dataIndex: 'PRODUIT.GpArticle'
}
}
// Indice
,{
xtype: 'gridcolumn'
,dataIndex: 'indice'
,text:TradOP18
,groupable:true
,sortable:true
,flex:1
,filter:{
type: 'string'
,dataIndex: 'PRODUIT.statut'
}
}
// Stock
,{
xtype: 'gridcolumn'
,dataIndex: 'stock'
,text:TradOP19
,groupable:true
,sortable:true
,flex:1
,filter:{
type: 'numeric'
,dataIndex: 'PRODUIT_MVT_STOCK.reste'
}
}
];
this.plugins = 'gridfilters';
me.callParent(arguments);
}
});
我做错了吗?
...谢谢
马克西姆
答案 0 :(得分:1)
只需添加过滤器即可。以下是如何实现它。
https://fiddle.sencha.com/#fiddle/17kp
dockedItems: [{
xtype: 'toolbar',
dock: 'top',
itemId: 'toptoolbar',
items: [{
xtype: 'textfield',
width: 200,
id: 'searchField',
itemId: 'searchField',
name: 'searchField',
listeners: {
change: function(field, newValue) {
// remove the existing filter.
shows.removeFilter('searchFilter');
// add filter if there is a search field value.
if (newValue && newValue.length > 0) {
var searchFilter = new Ext.util.Filter({
id: 'searchFilter',
anyMatch: true,
caseSensitive: false,
property: 'show',
value: newValue
});
// update the filter
shows.addFilter(searchFilter);
}
}
}
}]
}],