Как я вызываю дисплей десятичного числа в ExtJS NumberField к определенной точности?

Я - большой поклонник также, с помощью EF и Linq-SQL. Мои причины:

, Так как LINQ компилируется и безопасен с точки зрения типов, Вы не получаете проблемы опечаток в "основанном на операция со строками" SQL. Я не знаю, сколько часов я потратил своей жизни, разыскивающей ошибку в SP или другом SQL, где "галочка" или некоторое другое ключевое слово были в неправильном месте.

Вышеупомянутое и другие факторы делают разработку быстрее.

, Хотя, конечно, существует издержки по сравнению с "ближе к металлическим" методам запросов базы данных, ни один из нас не использовал бы.NET вообще или даже C++, если бы производительность была нашим беспокойством № 1. Для большинство приложения, я смог получить превосходную производительность от Linq-SQL, даже не используя сохраненный подход proc (основанные на клиенте скомпилированные запросы мой обычный подход).

, Конечно, для некоторых приложений Вы все еще хотите сделать вещи старомодный путь все же.

14
задан Erik Schierboom 18 July 2013 в 06:46
поделиться

3 ответа

либо extension :

var myNumberField = Ext.extend(Ext.form.NumberField, {
        setValue : function(v){
            v = typeof v == 'number' ? v : String(v).replace(this.decimalSeparator, ".");
            v = isNaN(v) ? '' : String(v).replace(".", this.decimalSeparator);
            //  if you want to ensure that the values being set on the field is also forced to the required number of decimal places.
            // (not extensively tested)
            // v = isNaN(v) ? '' : this.fixPrecision(String(v).replace(".", this.decimalSeparator));
            return Ext.form.NumberField.superclass.setValue.call(this, v);
        },
        fixPrecision : function(value){
            var nan = isNaN(value);
            if(!this.allowDecimals || this.decimalPrecision == -1 || nan || !value){
               return nan ? '' : value;
            }
            return parseFloat(value).toFixed(this.decimalPrecision);
        }
    });

...
...

items: [new myNumberField({
        id  : 'net',
        fieldLabel: 'Net Sales',
        allowBlank:false,
        decimalPrecision:2
    }),

, либо переопределить , и это повлияет на все числовые поля в вашем приложении:

Ext.override(Ext.form.NumberField, {
    setValue : function(v){
            v = typeof v == 'number' ? v : String(v).replace(this.decimalSeparator, ".");
        v = isNaN(v) ? '' : String(v).replace(".", this.decimalSeparator);
        return Ext.form.NumberField.superclass.setValue.call(this, v);
    },
    fixPrecision : function(value){
        var nan = isNaN(value);
        if(!this.allowDecimals || this.decimalPrecision == -1 || nan || !value){
           return nan ? '' : value;
        }
        return parseFloat(value).toFixed(this.decimalPrecision);
    }
})

items: [{
        xtype   : 'numberfield',
        fieldLabel: 'Net Sales',
        allowBlank:false,
        decimalPrecision:2
    },

EDIT

Обратите внимание на закомментированный раздел в первом методе setValue.

9
ответ дан 1 December 2019 в 07:39
поделиться

Лучшее Ставка, вероятно, состоит в том, чтобы добавить для него слушателя к событию размытия, а затем использовать встроенную функцию Javascript .toFixed (2) для значения поля.

1
ответ дан 1 December 2019 в 07:39
поделиться

Определение опции decimalPrecision: «Максимальная точность отображения после десятичного разделителя (по умолчанию 2)»

Нет возможности принудительно использовать формат, возможно, вам придется переопределить класс NumberField.

0
ответ дан 1 December 2019 в 07:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: