问题
I need your help with overriding an ExtJs Time field to show one custom value, 23:59. I tried to override the createStore function, but my time picker still has the standard values. What could be the issue?
Ext.override(Ext.picker.Time, {
createStore: function() {
var me = this,
utilDate = Ext.Date,
times = [],
min = me.absMin,
max = me.absMax;
while (min <= max) {
times.push({
disp: utilDate.dateFormat(min, me.format),
date: min
});
min = utilDate.add(min, 'mi', me.increment);
}
var end = new Date();
end.setHours(23, 59, 59, 999);
times.push({
disp: '23:59',
date: end
});
return new Ext.data.Store({
fields: ['disp', 'date'],
data: times
});
}
});
回答1:
Well, I guess when you look at the component's store, you will find that a filter called time-picker-filter is set. If you would unset that, the component would show your new record. I don't know what the filter is for, so I would advise against that.
The filter is configured and applied in the function updateList, and it takes the property maxValue or, if that one is undefined, absMax, as the upper limit.
So I guess you should check which values the properties maxValue and absMax contain, and if they are defined, change them to 23:59:59,999.
回答2:
In ExtJS 6, you can override the createStore() method as you have already done in your earlier version.
I have create a time value of 23:59 masquerading as 24:00.
Here is a working example.
Ext.picker.Time Override
Ext.define('App.components.TimePicker', {
override: 'Ext.picker.Time',
statics: {
createStore: function(format, increment) {
var me = this;
var store = me.callParent(arguments);
var dateUtil = Ext.Date;
var clearTime = dateUtil.clearTime;
var initDate = this.prototype.initDate;
if (format === 'H:i') {
var time = clearTime(new Date(initDate[0], initDate[1], initDate[2]));
time.setHours(23, 59);
store.add({
disp: '24:00',
date: time
});
}
return store;
}
}
});
Example Usage
Ext.application({
name: 'TimeApp',
autoCreateViewport: false,
launch: function() {
Ext.create('Ext.container.Viewport', {
layout: 'fit',
items: [{
xtype: 'form',
title: 'Date-Field 24th Hour Example',
bodyPadding: 12,
items: [{
xtype: 'timefield',
width: 220,
name: 'time',
fieldLabel: 'Time',
// ====================== // Begin custom options.
format: 'H:i', // Important
emptyText : '12:00', // Why not?
increment: 15, // Default value
listConfig : {
maxHeight: 160 // Limit rows to 5 (~32px each row)
}
}]
}]
});
}
});
来源:https://stackoverflow.com/questions/32500053/override-extjs-timefield-to-show-custom-max-value-2359