Jom*_*Jom 4 formatting numbers extjs4 extjs4.1
我想格式化用户以荷兰语格式输入的数字.即.使用小数分隔符作为,和千分隔符作为.
blur: function () {
Ext.util.Format.number(this.value, '000,000.00')
}
Run Code Online (Sandbox Code Playgroud)
我想在模糊上格式化我的数字字段,上面的代码工作正常,但我的要求是获得这样的格式 - '000000.000,00'.如何在extjs中执行此操作?
快速而肮脏,只需设置thousandSeparator和decimalSeparator.它应该工作:
//Set these once, right after Ext.onReady
Ext.util.Format.thousandSeparator = '.';
Ext.util.Format.decimalSeparator = ',';
//Then this should work:
Ext.util.Format.number(12345.67, '0,000.00'); //output 12.345,67
Run Code Online (Sandbox Code Playgroud)
甚至更好,使用本地化,因此可以根据语言要求更改格式.
边注:
该文件写道:
要允许使用英国/美国分组字符(,)和小数(.)为国际号码指定格式化字符串,请将/ i添加到末尾.例如:0.000,00/i
并从源代码中的注释
// The "/i" suffix allows caller to use a locale-specific formatting string.
// Clean the format string by removing all but numerals and the decimal separator.
// Then split the format string into pre and post decimal segments according to *what* the
// decimal separator is. If they are specifying "/i", they are using the local convention in the format string.
Run Code Online (Sandbox Code Playgroud)
对我来说,似乎这意味着开发人员可以使用特定格式字符串"0.000,00"来格式化给定数字,而不是说开发人员可以使用此特定格式字符串将数字格式化为他们想要的格式.他们仍然需要更改默认分隔符设置.
编辑
演示链接:http://jsfiddle.net/chaoszcat/nbWwN/
我现在正在为数字域中的用户输入值工作.
正如Lionel指出的那样,这是必要的:
// set this once after Ext.onReady
Ext.util.Format.thousandSeparator = '.';
Ext.util.Format.decimalSeparator = ',';
Run Code Online (Sandbox Code Playgroud)
然后将处理程序更改为:
blur: function(field) {
field.setRawValue(Ext.util.Format.number(field.getValue(), '0.000,00/i'));
}
Run Code Online (Sandbox Code Playgroud)
您还应该在您的号码字段中包含此配置:
decimalSeperator: ','
Run Code Online (Sandbox Code Playgroud)
它将允许用户键入自己的小数符号.
工作实例
这是一个使用数字字段的工作小提琴.
一句警告
Ext.form.field.Number不支持格式化,blur我上面给出的处理程序将完全正常,如果用户编辑该字段,然后不再回到它再次编辑它,如果他重新聚焦该字段,它将验证并尝试将数千个标记更正为小数.
如果您使用此字段将数据发回服务器,它将以显示的格式(带有千个分隔符)将其发回给我,我不知道这是不是您想要的.
如果你只是想要格式化的数字,你应该做你正在尝试做的事情,但有一个textfield.这样它就不会将您的千位重新配置为小数.
如果你想要一个数字字段的所有功能(微调器,最小/最大验证,步骤增量等),你将不得不看一下扩展numberfield类,这里是一个已经存在的用户扩展,几乎正是你需要的,但它包含一个货币符号,很容易把它拿出来.