数字字段中的ExtJS 6000分隔符
ExtJS 6 thousand separator in number field
如何使ExtJS(6)数字字段numberfield
显示千分隔符?默认情况下,Number
类不支持它。
我找到的唯一解决方案是覆盖Ext.form.field.Number
类。下面是我的代码。但是,您可以在github上找到它。
千分隔符功能由allowThousandSeparator
属性控制。
代码了解本地化。
Ext.define("some.package.ThousandSeparatorNumber", {
override: "Ext.form.field.Number",
/**
* @cfg {Boolean} allowThousandSeparator
* False to disallow thousand separator feature.
*/
allowThousandSeparator: true,
/**
* @private
*/
toBaseNumber: function(value) {
var me = this;
return String(value).replace(new RegExp("[" + Ext.util.Format.thousandSeparator + "]", "g"), '').replace(me.decimalSeparator, '.');
},
/**
* @private
*/
parseRawValue: function(value) {
var me = this;
value = parseFloat(me.toBaseNumber(value));
return isNaN(value) ? null : value;
},
getErrors: function(value) {
if (!this.allowThousandSeparator)
return this.callParent(arguments);
value = arguments.length > 0 ? value : this.processRawValue(this.getRawValue());
var me = this,
errors = me.callSuper([value]),
format = Ext.String.format,
num;
if (value.length < 1) { // if it's blank and textfield didn't flag it then it's valid
return errors;
}
value = me.toBaseNumber(value);
if (isNaN(value)) {
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;
},
rawToValue: function(rawValue) {
if (!this.allowThousandSeparator)
return this.callParent(arguments);
var value = this.fixPrecision(this.parseRawValue(rawValue));
if (value === null) {
value = rawValue || null;
}
return value;
},
valueToRaw: function(value) {
if (!this.allowThousandSeparator) {
return this.callParent(arguments);
}
var me = this,
decimalSeparator = me.decimalSeparator,
format = "0,000";
if (me.allowDecimals) {
for (var i = 0; i < me.decimalPrecision; i++) {
if (i == 0) {
format += ".";
}
format += "0";
}
}
value = me.parseValue(value);
value = me.fixPrecision(value);
value = Ext.isNumber(value) ? value : parseFloat(String(value).replace(decimalSeparator, '.'));
value = isNaN(value) ? '' : Ext.util.Format.number(value, format);
return value;
},
getSubmitValue: function() {
if (!this.allowThousandSeparator)
return this.callParent();
var me = this,
value = me.callSuper();
if (!me.submitLocaleSeparator) {
value = me.toBaseNumber(value);
}
return value;
},
setMinValue: function(value) {
if (!this.allowThousandSeparator)
return this.callParent(arguments);
var me = this,
ariaDom = me.ariaEl.dom,
minValue, allowed, ariaDom;
me.minValue = minValue = Ext.Number.from(value, Number.NEGATIVE_INFINITY);
me.toggleSpinners();
// May not be rendered yet
if (ariaDom) {
if (minValue > Number.NEGATIVE_INFINITY) {
ariaDom.setAttribute('aria-valuemin', minValue);
} else {
ariaDom.removeAttribute('aria-valuemin');
}
}
// Build regexes for masking and stripping based on the configured options
if (me.disableKeyFilter !== true) {
allowed = me.baseChars + '';
if (me.allowExponential) {
allowed += me.decimalSeparator + 'e+-';
} else {
allowed += Ext.util.Format.thousandSeparator;
if (me.allowDecimals) {
allowed += me.decimalSeparator;
}
if (me.minValue < 0) {
allowed += '-';
}
}
allowed = Ext.String.escapeRegex(allowed);
me.maskRe = new RegExp('[' + allowed + ']');
if (me.autoStripChars) {
me.stripCharsRe = new RegExp('[^' + allowed + ']', 'gi');
}
}
}
});
相关文章:
- Javascript和RegEx:拆分并保留分隔符
- 不使用分隔符分解字符串
- 设置自动分隔符的自定义属性
- 通过多个分隔符解析字符串
- 用分隔符分隔具有多个整数值的字符串的Javascript"重试错误的值
- Javascript Regex-从价格中抓取分隔符
- 基于多个分隔符计数项目
- 使用Regex拆分字符串,保留分隔符
- 如何使用JQuery提取URL中最后一个/分隔符之前的最后一个值
- JS将分隔符分隔的字符串转换为数组元素
- 插入多个文本分隔符-javascript
- 是<!--JavaScript中的有效注释分隔符
- 不带小数点的千分隔符的正则表达式
- 图表.js 2.0 使用货币和千位分隔符格式化 Y 轴
- 千位分隔符的正则表达式
- JavaScript 是否考虑了本地小数分隔符
- 在 Javascript 中拆分包含单次出现(不是两次)分隔符的字符串
- 拆分第二个分隔符值
- 基于两个分隔符进行拆分
- 数字字段中的ExtJS 6000分隔符