【问题标题】:SAPUI5 - Number Format LocalisationSAPUI5 - 数字格式本地化
【发布时间】:2017-06-24 14:51:12
【问题描述】:

我遇到了一个与不同语言的小数格式有关的问题。 对于 CURRENCY 控件,系统根据来自 URL 参数的语言采用正确的格式; US and DE ?sap-ui-language=DE?sap-ui-language=US

对于具有type=Number 属性的输入字段,无论语言设置如何,始终使用DOT 作为小数分隔符。 这个问题有解决方案吗? 我有一个动态的 sap.ui.table 填充(对于行和列),一些行有数字字段,一些行作为文本字段,所以我从后端动态发送数据格式,如下所示;

temp = new sap.m.Input(sColumnId + index,{  value:"{path: '" + sColumnId + "'}" , type:"{DATATYPE}",  textAlign:"Right", liveChange:[handle_livechange,this], change:[handle_change, this] , editable:"{path:'EDITABLE', type:'sap.ui.model.odata.type.String'}" }

由于某些行是基于文本的,因此我无法对格式化程序进行硬编码,如下所示;

 type:'sap.ui.model.type.Float', formatOptions : {   groupingEnabled: true, groupingSeparator: '.', decimalSeparator : ',', minFractionDigits: 2}}"

我尝试了自定义格式化程序,但不知何故在动态表上找不到我的格式化程序函数。 我尝试了 onChange 方法来动态格式化,但在这种情况下,我的 javascript 计算不起作用。

如果我可以使用表达式绑定根据行值控制格式化选项,它也会解决我的问题,但下面的代码不起作用。

temp = new sap.m.Input(sColumnId + index,{  value:"{path: '" + sColumnId + ", =${DATATYPE} === 'Number' ? type:'sap.ui.model.type.Float', formatOptions : {   groupingEnabled: true, groupingSeparator: '.', decimalSeparator : ',', minFractionDigits: 2} : type:'sap.ui.model.type.String' }"

【问题讨论】:

  • 后端可以在 {DATATYPE} 属性中返回哪些值?
  • 它是 Number 或 Text 。两种格式都可以正常工作,但是当它是数字时,无论语言设置如何,系统都会将小数分隔符设为 DOT
  • 你为什么不更简单地使用它,像这样: ?这应该会自动采用区域设置来构建正确的分隔符。
  • 在同一列中,我有不同的格式。例如,第 1 行第 1 列是文本格式,但第 2 列第 2 列是数字格式,这就是我尝试使用本地化来排列小数的原因。
  • AFAIK 只有“sap.ui.model.type.Currency”支持本地化。但是由于您混合了行(字符串/数字),您可能必须切换到“sap.ui.model.type.String”,编写一个解析器并将其附加到提交事件

标签: javascript jquery localization sapui5


【解决方案1】:

这种方法对我有用: 根据语言环境定义格式,例如, 在格式化程序文件中:

        sap.ui.define([
            "sap/ui/core/format/NumberFormat"
        ], function (NumberFormat) {     
        var oFloatNumberFormat = NumberFormat.getFloatInstance({
                    maxFractionDigits: 2,
                    minFractionDigits : 2,
                    groupingEnabled: true
                } , sap.ui.getCore().getConfiguration().getLocale());
        }


        return {
                 floatFormat: function(value){
                 return oFloatNumberFormat.format(value);
            },
    }
});

现在你想在哪里使用它:

var MyVar= new sap.m.Input({
            value: {
                path: "..../amount" ,
                formatter : function(amount) {
                    return yourdefinedname.floatFormat(amount);
                }
             }
          });

【讨论】:

  • 这会破坏双向绑定!
猜你喜欢
  • 1970-01-01
  • 2011-01-05
  • 2021-10-27
  • 1970-01-01
  • 2012-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多