Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Extjs 重写Ext.util.Format.thousandSeparator,格式化货币时除外_Extjs_Extjs4_Extjs4.1_Extjs4.2_Extjs Mvc - Fatal编程技术网

Extjs 重写Ext.util.Format.thousandSeparator,格式化货币时除外

Extjs 重写Ext.util.Format.thousandSeparator,格式化货币时除外,extjs,extjs4,extjs4.1,extjs4.2,extjs-mvc,Extjs,Extjs4,Extjs4.1,Extjs4.2,Extjs Mvc,我试图覆盖Ext.util.Format.decimalSeparator和千分表。因此,在我的应用程序中,当我将语言转换为西班牙语并尝试使用Ext.util.Format.number(1234,$0000')函数时,它仍然会将数字转换为1.234,而不是1234 我希望,无论我选择哪种语言,它都应该将货币格式设置为$0000格式,而不使用我选择的区域设置,例如,永远不要使用$0.000。我观察到,如果我更改Ext.util.Format对象的千分隔符,它就可以正常工作。因此,我在Applic

我试图覆盖Ext.util.Format.decimalSeparator和千分表。因此,在我的应用程序中,当我将语言转换为西班牙语并尝试使用Ext.util.Format.number(1234,$0000')函数时,它仍然会将数字转换为1.234,而不是1234

我希望,无论我选择哪种语言,它都应该将货币格式设置为$0000格式,而不使用我选择的区域设置,例如,永远不要使用$0.000。我观察到,如果我更改Ext.util.Format对象的千分隔符,它就可以正常工作。因此,我在Application.js的launch function中的Ext.Loader.loadScript回调函数中添加了以下代码

        var utilFormatObj={};
        utilFormatObj.thousandSeparator = ",";
        utilFormatObj.decimalSeparator = ".";
        Ext.override(Ext.util.Format, utilFormatObj);

但是,它似乎只在这个地方起作用,一旦它将应用程序加载到网页上,它就会再次返回到千千分隔符=“.”。我可以看到ext-lang-es.js文件具有设置这些属性的函数。有谁能建议我如何捕捉应用程序是否完全加载到webapge上,然后在那里使用上面的代码。谢谢。

我猜在构建应用程序进行部署后,您没有使用加载程序。通常,动态加载程序仅用于开发(因此您可以单独查看每个脚本),并且您可以在prod中使用更快的方法

您可以在Ext.define的回调上加载Ext覆盖:

Ext.define( className, data, [createdFn] )

其中createdFn是一个包含Ext覆盖的函数。如果在应用覆盖之前调用该Format对象,这种方法可能会适应竞争条件。为了确保自信,您可以添加另一个JS文件和覆盖(在加载Ext后,在加载应用程序代码之前),并确保在加载应用程序时包含该文件。

当您调用
Ext.util.Format.number()
时,您没有指定要用作小数点或千位分隔符的内容,您只指定了精度,是否显示千位分隔符,是否用零填充精度

国家:

格式字符串必须根据美国/英国惯例指定分隔符(“,”作为千位分隔符,“.”作为十进制分隔符)

因此,如果要在不同的语言环境中显示数字,则必须在调用
Ext.util.Format.number
Ext.util.Format.currency
之前运行更改默认分隔符的代码

    var value = 202020.20, format = "0,000.0000";
    // Print in Spanish
    Ext.util.Format.thousandSeparator  = ".";
    Ext.util.Format.decimalSeparator  = ",";
    alert(Ext.util.Format.number(value, format));

    // Print in Swedish French
    Ext.util.Format.thousandSeparator  = "'";
    Ext.util.Format.decimalSeparator  = ",";
    alert(Ext.util.Format.number(value, format));

    // Print in English
    Ext.util.Format.thousandSeparator  = ",";
    Ext.util.Format.decimalSeparator  = ".";
    alert(Ext.util.Format.number(value, format));        
如果您真的想指定货币应始终使用句点作为千位分隔符,但仍有Ext.util.Format.number,则可以使用以下方法使用选定区域设置的分隔符

function formatMoney(amount, sign, decimals, end) {
   // Save the thousand separator
   var thousandSep =  Ext.util.Format.thousandSeparator;
   Ext.util.Format.thousandSeparator = '.';
   var formatted =  Ext.util.Format.currency(amount, sign, decimals, end);
   // restore the thousand separator
   Ext.util.Format.thousandSeparator = thousandSep;
   return formatted;
}
上述代码段的示例: