ich eine Combobox haben, in dem man eine bestimmte Zeitspanne auswählen kann, zB:A Combobox, die den Wert Auto-Korrektur
5 minutes
15 minutes
1 hour
2 hours
1 day
2 days
1 week
2 weeks
Es überträgt immer die Anzahl der Minuten an den Server, aber der Benutzer wouldn‘ Ich verstehe, was "10080" bedeutet (bevor Sie versuchen zu berechnen: es ist eine Woche).
Eine neue Anforderung ist, dass der Benutzer in der Lage sein soll, beliebige Werte in diese Box einzugeben. Z.B. "20 Minuten", "1 Stunde 5 Minuten", "2h 5m" oder "1d 6h 120m"; und wenn das Feld programmgesteuert auf einen bestimmten Wert eingestellt ist (zB 75), sollte das Feld die korrekte Zeichenkette anzeigen (1 Stunde 15 Minuten)
Also habe ich einen Parser und eine Formatierungsfunktion geschrieben Aber wie kann ich meine Combobox benutzen?
Ich habe bereits versucht, das Überschreiben der rawToValue/valueToRaw Funktionspaar, ähnlich dem, was ich in der datefield
Code gefunden:
rawToValue:function(rawValue) {
console.log('rawToValue');
console.log(rawValue);
return this.parse(rawValue) || rawValue || null;
},
valueToRaw:function(value) {
console.log('valueToRaw');
console.log(value);
return this.format(value);
},
aber sie werden nicht genannt, ich erhalte keine Konsolenprotokoll ausgegeben.
Dies sind die Parser/Formatierer Funktionen:
Ext.define('AlarmTimeField',{
extend:'Ext.form.field.ComboBox',
format:function(minutes) {
var a = [];
Ext.each(this.units, function(unit) {
if(minutes >= unit.minutes) {
var unitCount = Math.floor(minutes/unit.minutes);
console.log(unitCount);
minutes = minutes-unitCount*unit.minutes;
a.push("" + unitCount + " " + (unitCount==1?unit.singular:unit.plural));
}
});
return a.join(' ');
},
parse:function(input) {
if(!input) return 0;
var me=this,
inputSplit = input.split(' '),
value = 0,
lastNum = 0;
Ext.each(inputSplit,function(input) {
if(!input) return;
else if(Ext.isNumeric(input)) lastNum = input;
else if(Ext.isNumeric(input[0])) {
var inputUnit = input.slice(-1),
inputValue = input.slice(0,-1);
Ext.each(me.units,function(unit) {
if(inputUnit==unit.abbr) {
value+=unit.minutes*inputValue;
}
});
}
else {
Ext.each(me.units,function(unit) {
if(input==unit.singular || input==unit.plural || input==unit.abbr) {
value+=unit.minutes*lastNum;
}
});
}
});
return value;
},
units:[{
minutes:10080,
abbr:'w',
singular:'week',
plural:'weeks'
},{
minutes:1440,
abbr:'d',
singular:'day',
plural:'days'
},{
minutes:60,
abbr:'h',
singular:'hour',
plural:'hours'
},{
minutes:1,
abbr:'m',
singular:'minute',
plural:'minutes'
}]
});
Können Sie dafür eine Geige bereitstellen? – Harshal
https://fiddle.sencha.com/#view/editor&fiddle/1r95 – Alexander