Ext.override.ThousandSeparatorNumberField

by Jussia

HTML

<link rel="stylesheet" href="http://cdn.sencha.io/ext-4.2.0-gpl/resources/css/ext-all.css">

JavaScript

// РАБОЧИЙ ВАРИАНТ!!!!!
Ext.define("Ext.override.ThousandSeparatorNumberField", {
    override: "Ext.form.field.Number",
    
    /**
    * @cfg {Boolean} useThousandSeparator
    */
    decimalSeparator: '.',
		thousandSeparator: ',',
    useThousandSeparator: true,
    
    /**
     * @inheritdoc
     */
    toRawNumber: function (value) {
        return String(value).replace(this.thousandSeparator, '.')
    },
    
    /**
     * @inheritdoc
     */
    getErrors: function (value) {
        if (!this.useThousandSeparator)
            return this.callParent(arguments);
        var me = this,
            errors = Ext.form.field.Text.prototype.getErrors.apply(me, arguments),
            format = Ext.String.format,
            num;

        value = Ext.isDefined(value) ? value : this.processRawValue(this.getRawValue());

        if (value.length < 1) { // if it's blank and textfield didn't flag it then it's valid
            return errors;
        }

        value = me.toRawNumber(value);

        if (isNaN(value.replace(Ext.util.Format.thousandSeparator, ''))) {
            errors.push(format(me.nanText, value));
        }

        num = me.parseValue(value);

        if (me.minValue === 0 && num < 0) {
            errors.push(this.negativeText);
        }
        else if (num < me.minValue) {
            errors.push(format(me.minText, me.minValue));
        }

        if (num > me.maxValue) {
            errors.push(format(me.maxText, me.maxValue));
        }

        return errors;
    },
    
    /**
     * @inheritdoc
     */
     valueToRaw: function (value) {
        if (!this.useThousandSeparator)
            return this.callParent(arguments);
        var me = this;
        value = me.parseValue(value);
        value = me.fixPrecision(value);
        value = Ext.isNumber(value) ? value : parseFloat(me.toRawNumber(value));
       value = isNaN(value) ? '' : String(value).replace(',', me.decimalSeparator);
        return value;
    },
    
    /**
     *...