Javascript 用于datetime的ExtJS自定义gridfilter
我正在做一个定制的datetime过滤器,因为Ext的datetime过滤器不是很好。我有一个datetime字段:fieldcontainer中的datefield和timefield具有值。。。它很好用 我扩展了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
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();
}