2014-09-05 33 views
2

我试图重写Ext.util.Format.decimalSeparator和thousandSeparator。因此,在我的应用程序中,当我将语言转换为西班牙语并且尝试使用此函数Ext.util.Format.number(1234,'$ 0,000')时,它仍然将该数字转换为1.234而不是1,234。重写Ext.util.Format.thousandSeparator,除非格式化钱

我想要的是,无论我选择哪种语言,它总是应该将货币格式化为$ 000格式,而不是使用我选择的区域设置,例如从不$ 0.000。我观察如果我更改Ext.util.Format对象的000Separator,它工作正常。所以,我在添加在application.js中发射功能Ext.Loader.loadScript回调函数下面的代码,

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

但是,似乎只有在这个地方工作,一旦加载网页上的应用程序,它再次回到000Separator =“。”。我可以看到ext-lang-es.js文件具有设置这些属性的功能。任何人都可以建议如何捕捉应用程序是否完全加载到webapge然后使用上面的代码。谢谢。

回答

2

当您拨打Ext.util.Format.number()时,您没有指定要使用什么作为十进制或千位分隔符,您只是指定精度,是否显示千位分隔符以及是否用零填充精度。

The documentation for Ext.util.Format.number状态:

格式字符串必须根据美国/英国约定指定分隔符( “” 为千位分隔符,和小数点分隔符 “”)

因此,如果要以不同语言环境显示数字,则必须在调用Ext.util.Format.numberExt.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; 
} 

实例上面的代码片段:https://fiddle.sencha.com/#fiddle/9vm

+0

谢谢....完美的作品:) – user2316489 2014-09-08 20:25:41

0

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

你可以在回调加载您的分机覆盖了Ext.define:

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

其中createdFn是包含您的分机覆盖的功能。如果在应用覆盖之前调用该Format对象,则此方法可能适用于竞争条件。为了有信心,你可以添加另一个JS文件(在你的应用程序代码之前加载Ext之后),并确保在加载应用程序时包含该文件。