无法对过滤网格面板进行排序(w/fiddle)

cannot sort filtered grid panel (w/fiddle)

本文关键字:排序 fiddle 过滤 网格      更新时间:2023-09-26

我有一个sencha fiddle,可以用来重现我在这里看到的问题:

https://fiddle.sencha.com/小提琴/s2e

我看到的问题是,如果我通过点击Bart, Marge和Homer手动更改'Name'列上的过滤器,然后尝试对我在列节中添加的过滤器进行排序……

columns: [
    { 
        text      : 'Name',  
        dataIndex : 'name',
        filter   : { type: 'list', value : 'Lisa'}
    },

…覆盖我通过UI手动做出的选择。或者换句话说,"如果我单击Bart、Marge和Homer,它们将出现在网格面板中,直到我对行进行排序。"当我对行进行排序时,只显示Lisa。"

这是一个bug还是我做错了什么?

该列排除与value: 'Lisa'不匹配的值正如@afschr上面所说的-删除值,param将具有此功能。

filter   : { type: 'list'}

这可能是一个bug。当然,你可以像Akin说的那样改变你的过滤器。但是,如果您出于某些原因不想更改过滤器,也有一个变通方法。您可以在排序完成后停止排序事件,这样过滤器就不会重置为您设置的默认过滤器( filter: { type: 'list', value : 'Lisa'} )。

为此,您需要更改主网格面板在视图文件夹中,并添加一个"sortchange"监听器,如下所示:

Ext.define('MVC.view.Master', {
    extend : 'Ext.grid.Panel',
    xtype  : 'mvc-MasterView',
    title : 'Master Panel',
    store : 'People',
    plugins: 'gridfilters',
    selModel: {
        cellSelect: false,
        type: 'spreadsheet'
    },
    // The code you should add.
    listeners: {
        sortChange: function() {
            this.stopEvent()
        }
    },
    // End of code addition

    columns: [
        { 
            text      : 'Name',  
            dataIndex : 'name',
            filter   : { type: 'list', value : 'Lisa'}
        },
        { 
            text      : 'Email', 
            dataIndex : 'email', 
            flex      : 1 
        },
        { 
            text      : 'Phone',
            dataIndex : 'phone' 
        }
    ]
});