SAPUI5 - 数字格式本地化

bil*_*len 5 javascript jquery localization sapui5

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

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

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'}" }
Run Code Online (Sandbox Code Playgroud)

由于某些行是基于文本的,我不能硬编码格式化程序,如下所示;

 type:'sap.ui.model.type.Float', formatOptions : {   groupingEnabled: true, groupingSeparator: '.', decimalSeparator : ',', minFractionDigits: 2}}"
Run Code Online (Sandbox Code Playgroud)

我尝试了自定义格式化程序但不知何故在动态表格中找不到我的格式化程序功能.我试过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' }"
Run Code Online (Sandbox Code Playgroud)

kho*_*r J 3

这种方法对我有用:根据区域设置定义格式,例如在格式化程序文件中:

        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);
            },
    }
});
Run Code Online (Sandbox Code Playgroud)

现在你想在哪里使用它:

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