在ExtJS中自定义日期过滤器菜单

时间:2018-08-09 12:56:30

标签: extjs

我一直在使用ExtJS网格日期过滤,并且会非常感谢您的帮助。

我的目标是删除“ Before”和“ After”子菜单项,并仅显示“ On”项(甚至更好的是删除整个子菜单并仅显示日期选择器)。

所以我的问题是,是否可以删除那些物品,我该怎么办? 我尝试过使用menuItems配置menuItems: ['eq'],这在视觉上有效,但是当我从日期选择器中选择某个日期时,会收到此错误Uncaught TypeError: Cannot read property 'up' of undefined

Sencha Fiddle

谢谢!

1 个答案:

答案 0 :(得分:0)

“ onMenuSelect”上的“日期”过滤器组件存在问题,如果您选择“ on”选项,它将尝试取消选择“ before”和“ after”菜单,但是在配置中已将其删除。

我做了一些改写来解决此问题:

    Ext.override(Ext.grid.filters.filter.Date, {

            onMenuSelect: function(picker, date) {
                var me = this,
                    fields = me.fields,
                    filters = me.filter,
                    field = fields[picker.itemId],
                    gt = fields.gt,
                    lt = fields.lt,
                    eq = fields.eq,
                    v = {};
                field.up('menuitem').setChecked(true, /*suppressEvents*/
                true);


                //The problem ocurrs here, i modified this line
                //if (field === eq) {
                //**********************************************
                if ((field === eq)&&(lt!=null)&&(gt!=null)) {

                    lt.up('menuitem').setChecked(false, true);
                    gt.up('menuitem').setChecked(false, true);
                } else {
                    eq.up('menuitem').setChecked(false, true);
                    if (field === gt && (+lt.value < +date)) {
                        lt.up('menuitem').setChecked(false, true);                           
                        if (filters.lt.getValue() != null) {
                            v.lt = null;
                        }
                    } else if (field === lt && (+gt.value > +date)) {
                        gt.up('menuitem').setChecked(false, true);                           
                        if (filters.gt.getValue() != null) {
                            v.gt = null;
                        }
                    }
                }
                v[field.filterKey] = date;
                me.setValue(v);
                picker.up('menu').hide();
            }
        });