Como este fue el primer resultado de una consulta de búsqueda de obligar a los decimales en un NumberField, pensé que iba a actualizar esto para aquellos que utilizan ExtJS 4+
El filtrado de entrada desde ExtJS 4 ha sido delegadas a una función valueToRaw, la función setValue utilizada es en realidad de Ext.form.field.Text, así que eso es lo que estoy redefiniendo a continuación.
también decidí tener el forzamiento de mostrar decimales a ser una opción ('forcePrecision') configurable por NumberField, lo que significa la anulación se verá así:
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;
}
});
Para utilizar esto en su forma, que le crea una instancia de esta manera:
{
xtype: 'numberfield',
name: 'decimalsfield',
forcePrecision: true, #defaults to false
decimalPrecision: 3 #defaults to 2
}
campos no instanciados con forcePrecision: verdadera se comportan exactamente igual que el valor predeterminado.
he intentado su anulación, y funciona muy bien en un evento de cambio. Sin embargo, cuando el formulario carga datos desde una JsonStore, no se llama a fixPrecision. ¿Hay alguna manera de activarlo? –
¿Hace que un JsonReader, no un JsonStore ... –
marque como "respondido"? :) – Joshua