javascript - 如何在页面加载时启用 Extjs 过滤器

标签 javascript jquery extjs

我想用激活某些过滤器的不同按钮来过滤我的网格。但是,它们不适用于页面加载。只有当您选择/取消选择过滤器选项然后单击按钮时,过滤器才会真正启动。

当页面首次加载并单击按钮时,会出现以下错误:

TypeError: filter is undefined

如何在页面首次加载时启用这些过滤器设置?

重现错误。加载 fiddle 并尝试单击按钮并注意它们不起作用。然后激活其中一个过滤器并重试。激活过滤器后,按钮将起作用。

Fiddle

按钮

 var openButton = Ext.create('Ext.Button', {
            text: 'Open Topics',
            handler: function () {
                var filter = grid[uniqueId].filters.getFilter('TopicStateValue');
                filter.setActive(true);
                filter.setValue('Open/Current');
            }
        });
        var holdButton = Ext.create('Ext.Button', {
            text: 'On Hold Topics',
            handler: function () {
                var filter = grid[uniqueId].filters.getFilter('TopicStateValue');
                filter.setActive(true);
                filter.setValue('Hold');
            }
        });
        var closedButton = Ext.create('Ext.Button', {
            text: 'Closed Topics',
            handler: function () {
                var filter = grid[uniqueId].filters.getFilter('TopicStateValue');
                filter.setActive(true);
                filter.setValue('Archived/Closed');
            }
        });

columns: [{
        text: 'Title',
        width: 260,
        dataIndex: 'Title',
        filterable: true,
        filter: {
            type: 'string'
                // specify disabled to disable the filter menu
                //, disabled: true
        }
    }, {
        text: 'Description',
        flex: 1,
        dataIndex: 'Description',
        filter: {
            type: 'string'
                // specify disabled to disable the filter menu
                //, disabled: true
        }
    }, {
        text: 'Modified',
        width: 90,
        dataIndex: 'Modified',
        xtype: 'datecolumn',
        format: 'm/d/Y',
        filter: true
    }, {
        text: 'Status',
        width: 100,
        dataIndex: 'TopicStateValue',
        filter: {
            active: true,
            type: 'list',
            value: 'Open/Current',
            options: ['Open/Current', 'Archived/Closed', 'Hold']
        }
    }]

最佳答案

在给它传值之前检查过滤器是否存在,如果不存在,像这样添加:

 var openButton = Ext.create('Ext.Button', {
            text: 'Open Topics',
            handler: function () {
                var filter = grid[uniqueId].filters.getFilter('TopicStateValue');
                if (!filter) {
                    filter = grid[uniqueId].filters
                            .addFilter({
                                type : 'string',
                                dataIndex : 'TopicStateValue'
                            });
                }
                filter.setActive(true);
                filter.setValue('Open/Current');
            }
        });
        var holdButton = Ext.create('Ext.Button', {
            text: 'On Hold Topics',
            handler: function () {
                var filter = grid[uniqueId].filters.getFilter('TopicStateValue');
                if (!filter) {
                    filter = grid[uniqueId].filters
                            .addFilter({
                                type : 'string',
                                dataIndex : 'TopicStateValue'
                            });
                }
                filter.setActive(true);
                filter.setValue('Hold');
            }
        });
        var closedButton = Ext.create('Ext.Button', {
            text: 'Closed Topics',
            handler: function () {
                var filter = grid[uniqueId].filters.getFilter('TopicStateValue');
                if (!filter) {
                    filter = grid[uniqueId].filters
                            .addFilter({
                                type : 'string',
                                dataIndex : 'TopicStateValue'
                            });
                }
                filter.setActive(true);
                filter.setValue('Archived/Closed');
            }
        });

关于javascript - 如何在页面加载时启用 Extjs 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45571089/

相关文章:

javascript - 未捕获的语法错误 : Unexpected string in js ( xxamp)

javascript - 为什么这两个函数更新 React 组件的方式不同?

javascript - jqgrid自定义删除对话框消息

javascript - 应用 css 时排除上层父级

Extjs 在容器中动态包装项目

javascript - ExtJS - 遍历 CheckBoxGroup

javascript - 激活选项卡面板中的选项卡而不访问它 extjs4.2

javascript - 使用 Javascript 实时打印字段输入数据

javascript - 在页面加载和按钮单击时运行定义的函数

javascript - 具有 Transclusion 和分块数据的 AngularJS 指令