Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于datetime的ExtJS自定义gridfilter_Javascript_Extjs_Filter_Extjs4_Extjs4.2 - Fatal编程技术网

Javascript 用于datetime的ExtJS自定义gridfilter

Javascript 用于datetime的ExtJS自定义gridfilter,javascript,extjs,filter,extjs4,extjs4.2,Javascript,Extjs,Filter,Extjs4,Extjs4.2,我正在做一个定制的datetime过滤器,因为Ext的datetime过滤器不是很好。我有一个datetime字段:fieldcontainer中的datefield和timefield具有值。。。它很好用 我扩展了Ext.ux.grid.filter.filter,并像构建日期过滤器一样构建了我的过滤器 fieldCfg = Ext.apply(me.fieldOpts, { xtype: 'datetimefield', overflowX: 'visible', f

我正在做一个定制的datetime过滤器,因为Ext的datetime过滤器不是很好。我有一个datetime字段:fieldcontainer中的datefield和timefield具有值。。。它很好用

我扩展了
Ext.ux.grid.filter.filter
,并像构建日期过滤器一样构建了我的过滤器

fieldCfg = Ext.apply(me.fieldOpts, {
    xtype: 'datetimefield',
    overflowX: 'visible',
    format:  me.format,
});

fields = {};
for (i = 0, len = me.menuItems.length; i < len; i++) {
    item = me.menuItems[i];
    if (item !== '-') {
        cfg = {
            itemId: 'range-' + item,
            text: me[item + 'Text'],
            menu: Ext.create('Ext.menu.Menu', {
                plain: true,

                items: [
                    Ext.apply(fieldCfg, {
                        itemId: item,
                        margin: '2 10 2 2',
                        overflowX: 'visible'
                    })
                ],
            }),
            listeners: {
                scope: me,
                checkchange: me.onCheckChange,
                render: function (t){
                    var dtf = t.menu.items.items[0];
                    var df = dtf.getDateField();
                    var tf = dtf.getTimeField();
                    df.on("select", me.selectDateEvent, me)
                    tf.on("select", me.selectDateEvent, me)
                },
            }
        };
        item = me.fields[item] = Ext.create('Ext.menu.CheckItem', cfg);
    }
    me.menu.add(item);
}
me.values = {};
以下是其他处理程序的代码:

onCheckChange: function(item, checked) {
    var me = this, 
        picker = item.menu.items.items[0], 
        itemId = picker.itemId, 
        values = me.values;
    if (checked) {
        values[itemId] = picker.getValue();
    } else {
        delete values[itemId]
    }
    me.setActive(me.isActivatable());
    me.fireEvent('update', me);
}

onMenuSelect: function(picker, date) {
    var fields = this.fields, 
        field = this.fields[picker.itemId];
    field.setChecked(true);
    if (field == fields.on) {
        fields.before.setChecked(false, true);
        fields.after.setChecked(false, true);
    } else {
        fields.on.setChecked(false, true);
        if (field == fields.after && this.getFieldValue('before') < date) {
            fields.before.setChecked(false, true);
        } else if (field == fields.before && this.getFieldValue('after') > date) {
            fields.after.setChecked(false, true);
        }
    }
    this.fireEvent('update', this);
    picker.up('menu').hide();
}
onCheckChange:函数(项,选中){
var me=这个,
picker=item.menu.items.items[0],
itemId=picker.itemId,
价值观=自我价值观;
如果(选中){
值[itemId]=picker.getValue();
}否则{
删除值[itemId]
}
me.setActive(me.isActivatable());
me.firevent('update',me);
}
onMenuSelect:函数(选择器、日期){
var fields=this.fields,
field=this.fields[picker.itemId];
字段。setChecked(true);
if(field==fields.on){
字段.before.setChecked(false,true);
字段.after.setChecked(false,true);
}否则{
字段.on.setChecked(false,true);
if(field==fields.after&&this.getFieldValue('before')date){
字段.after.setChecked(false,true);
}
}
this.firevent('update',this);
picker.up('menu').hide();
}

但是它没有过滤网格中的数据。我怎样才能让它工作?我做错了什么?

如果您的存储在客户端被过滤,您需要实现该方法。

您是否有javascript错误,或者只是什么都没有发生?您是否真的从
Ext.ux.grid.filter.filter
Ext.ux.grid.filter.DateFilter
进行扩展?如果我们有完整的过滤器类代码,那么解决问题就更简单了。没有错误,只是什么都没有发生。我把它做成了DateFilter,DateFilter也是从Filter扩展而来的<代码>Ext.define('Ext.ux.grid.filter.DateTimeFieldFilter',{extend:'Ext.ux.grid.filter.filter',别名:'gridfilter.datetimefield',…因为datetimefield是我的自定义datetime字段。那么
onMenuSelect
onCheckChange
方法的代码是什么呢?图中有:@Eleanor将该代码添加到问题中。不要让其他人点击查看图片f你的代码。
onCheckChange: function(item, checked) {
    var me = this, 
        picker = item.menu.items.items[0], 
        itemId = picker.itemId, 
        values = me.values;
    if (checked) {
        values[itemId] = picker.getValue();
    } else {
        delete values[itemId]
    }
    me.setActive(me.isActivatable());
    me.fireEvent('update', me);
}

onMenuSelect: function(picker, date) {
    var fields = this.fields, 
        field = this.fields[picker.itemId];
    field.setChecked(true);
    if (field == fields.on) {
        fields.before.setChecked(false, true);
        fields.after.setChecked(false, true);
    } else {
        fields.on.setChecked(false, true);
        if (field == fields.after && this.getFieldValue('before') < date) {
            fields.before.setChecked(false, true);
        } else if (field == fields.before && this.getFieldValue('after') > date) {
            fields.after.setChecked(false, true);
        }
    }
    this.fireEvent('update', this);
    picker.up('menu').hide();
}