ExtJS 5:在网格上使用searchfield + gridfilters插件

时间:2016-03-18 08:20:24

标签: extjs extjs5

我使用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);


    }


});

我做错了吗?

...谢谢

马克西姆

1 个答案:

答案 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);
                }
            }
        }
    }]
}],