Поскольку это был первый результат для поискового запроса о принудительном десятичные в NumberField, подумал я бы обновить это для тех, кто использует ExtJS 4+
входной фильтрации, так как ExtJS 4 была делегированы функции valueToRaw, используемая функция setValue на самом деле из Ext.form.field.Text, так что это то, чем я занимаюсь ниже.
Я также решил форсирование отображения десятичных знаков, чтобы быть одним из вариантов («forcePrecision») настраивается на NumberField, что означает переопределение будет выглядеть следующим образом:
Ext.override(Ext.form.NumberField, {
forcePrecision : false,
valueToRaw: function(value) {
var me = this,
decimalSeparator = me.decimalSeparator;
value = me.parseValue(value);
value = me.fixPrecision(value);
value = Ext.isNumber(value) ? value : parseFloat(String(value).replace(decimalSeparator, '.'));
if (isNaN(value))
{
value = '';
} else {
value = me.forcePrecision ? value.toFixed(me.decimalPrecision) : parseFloat(value);
value = String(value).replace(".", decimalSeparator);
}
return value;
}
});
Чтобы использовать это в форме, вы бы его экземпляр так:
{
xtype: 'numberfield',
name: 'decimalsfield',
forcePrecision: true, #defaults to false
decimalPrecision: 3 #defaults to 2
}
поля не инстанцированы с forcePrecision: истинно ведут себя так же, как по умолчанию.
Я попробовал ваш переопределение, и он прекрасно работает на событие изменения. Однако, когда форма сначала загружает данные из JsonStore, fixPrecision не вызывается. Есть ли способ вызвать его? –
Сделайте это JsonReader, а не JsonStore ... –
отметьте как «ответили»? :) – Joshua