4

我想将用户输入的数字格式化为荷兰语格式。IE。使用十进制分隔符作为千位分隔符作为

blur: function () {
   Ext.util.Format.number(this.value, '000,000.00')
}

我想在模糊上格式化我的数字字段,上面的代码工作正常,但我的要求是获得这样的格式 - '000000.000,00'。如何在 extjs 中做到这一点?

4

2 回答 2

8

又快又脏,只需设置thousandSeparatorand 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

或者更好的是,使用本地化,因此可以根据语言要求更改格式。

边注:

文档写道:

要允许对国际数字使用英国/美国分组字符 (,) 和小数 (.) 指定格式字符串,请将 /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.

在我看来,这似乎意味着开发人员可以使用特定的格式字符串“0.000,00”来格式化给定的数字,而不是意味着开发人员可以使用这种特定的格式字符串将数字格式化为他们想要的格式。他们仍然需要更改默认分隔符设置。

编辑

演示链接:http: //jsfiddle.net/chaoszcat/nbWwN/

于 2012-06-19T13:58:17.013 回答
5

我现在可以为用户在数字字段中输入的值工作。

正如莱昂内尔指出的那样,这是必要的:

// set this once after Ext.onReady
Ext.util.Format.thousandSeparator = '.';
Ext.util.Format.decimalSeparator = ',';

然后将您的处理程序更改为:

blur: function(field) {
   field.setRawValue(Ext.util.Format.number(field.getValue(), '0.000,00/i'));
}

您还应该在您的数字字段中包含此配置:

decimalSeperator: ','

它将允许用户输入自己的十进制符号。

工作示例

是一个使用数字字段的工作小提琴。

一句警告

Ext.form.field.Number不支持格式化,blur如果用户编辑该字段然后不返回到它再次编辑它,我上面给出的处理程序将完全正常工作,如果他重新聚焦该字段,它将验证并尝试将数千个标记更正为小数.

如果您使用此字段将数据发送回服务器,它将以显示的格式(带有千位分隔符)发送回,我不知道这是否是您想要的。

如果您只是想要格式化的数字,您应该执行您在上面尝试执行的操作,但使用textfield. 这样它就不会将您的千位重新配置为小数。

如果您想要数字字段的所有功能(微调器、最小/最大验证、步长增量等),您将不得不查看扩展numberfield类,这是一个已经存在的用户扩展,这几乎正是您所需要的,但它包含一个货币符号,很容易将其取出。

于 2012-06-18T20:39:01.293 回答