Нужно показывать часы как 07:00, 15:00, 23:00 (с шагом 8 часов) во временном поле EXTJs
Мне нужно показывать часы как 07:00, 15:00, 23:00 (с шагом 8 часов) во временном поле EXTJ, но когда я использовал следующий код, он не дает желаемого результата, может ли кто-нибудь помочь мне, если я я что-то упустил
Ext.create('Ext.form.Panel', {
title: 'Time Card',
width: 300,
bodyPadding: 10,
renderTo: Ext.getBody(),
items: [{
xtype: 'timefield',
name: 'in',
fieldLabel: 'Time In',
format : 'H:i',
minValue: '07:00',
maxValue: '23:00',
increment: 480,
anchor: '100%'
}]
});
Заранее спасибо.
1 ответ
У вас есть небольшая проблема, потому что Time Picker не работает так, как вы пытаетесь заставить его работать. Я разобью это, чтобы у вас была идея:
1) Получить все часы в течение 24 часов (с 00 до 23).
2) Будет использоваться метод для увеличения времени от 00 до 23 каждый increment
минут. например (если вы установили increment: 60
, тогда вы получите 00:00, 01:00, 02:00)
3) Этот набор данных будет возвращен в ваше поле Time, и к нему будет применен фильтр, используя ваши minValue и MaxValue
Итак, с вашими настройками 480 вы получите: 00:00, 08:00, 16:00.
Затем применяя фильтры (minValue: 07:00
а также maxValue: 23:00
) вырежет первый, оставив вас с 08:00 и 16:00.
По сути, вы хотите, чтобы первый интервал составлял 7 часов, а затем 8 часов после первого цикла, поэтому вам нужно применить переопределение, например:
**** Я не проверил это полностью, поэтому вы можете быть осторожны, если хотите использовать это с разными временными интервалами. ***
Ext.define('Ext.picker.override.Time',{
override: 'Ext.picker.Time',
statics: {
createStore: function(format, increment, startHour) {
var dateUtil = Ext.Date,
clearTime = dateUtil.clearTime,
initDate = this.prototype.initDate,
times = [],
min = clearTime(new Date(initDate[0], initDate[1], initDate[2])),
startHour = startHour || min,
max = dateUtil.add(clearTime(new Date(initDate[0], initDate[1], initDate[2])), 'mi', (24 * 60) - 1),
firstIncrement = startHour.getHours() * 60,
count = 0;
while(min <= max){
times.push({
disp: dateUtil.dateFormat(min, format),
date: min
});
min = dateUtil.add(min, 'mi', (count++ == 0 ? firstIncrement : increment));
}
return new Ext.data.Store({
model: Ext.picker.Time.prototype.modelType,
data: times
});
}
}
});
Ext.define('Ext.form.field.CustomTime',{
extend: 'Ext.form.field.Time',
alias: 'widget.customtimefield',
initComponent: function() {
var me = this,
min = me.minValue,
max = me.maxValue;
if (min) {
me.setMinValue(min);
}
if (max) {
me.setMaxValue(max);
}
me.displayTpl = new Ext.XTemplate(
'<tpl for=".">' +
'{[typeof values === "string" ? values : this.formatDate(values["' + me.displayField + '"])]}' +
'<tpl if="xindex < xcount">' + me.delimiter + '</tpl>' +
'</tpl>', {
formatDate: me.formatDate.bind(me)
});
// Create a store of times.
me.store = Ext.picker.Time.createStore(me.format, me.increment, me.minValue);
me.superclass.superclass.initComponent.call(this);
// Ensure time constraints are applied to the store.
// TimePicker does this on create.
me.getPicker();
}
});
Ext.create('Ext.form.Panel', {
title: 'Time Card',
width: 300,
bodyPadding: 10,
renderTo: Ext.getBody(),
items: [{
xtype: 'customtimefield',
name: 'in',
fieldLabel: 'Time In',
format : 'H:i',
minValue: '07:00',
maxValue: '23:00',
increment: 480,
anchor: '100%'
}]
});
Скрипка: https://fiddle.sencha.com/