格式化程序函数没有';不能在XML片段中工作

格式化程序函数没有';不能在XML片段中工作,xml,sapui5,hana,formatter,Xml,Sapui5,Hana,Formatter,在我的控制器文件中有一个名为“formatCurrency”的函数,但我无法让XML片段使用它 这是my Controller.js文件中的函数: formatCurrency : function(value){ var d = "."; var t = ","; var c = 2; var p = "$"; c = isNaN(c = Math.abs(c)) ? 2 : c; var s = value < 0 ? "-" : "";

在我的控制器文件中有一个名为“formatCurrency”的函数,但我无法让XML片段使用它

这是my Controller.js文件中的函数:

formatCurrency : function(value){
    var d = ".";
    var t = ",";
    var c = 2;
    var p = "$";
    c = isNaN(c = Math.abs(c)) ? 2 : c;
    var s = value < 0 ? "-" : "";
    var i = parseInt(value = Math.abs(+value || 0).toFixed(2)) + "";
    var j = (j = i.length) > 3 ? j % 3 : 0;
    return p + s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(value - i).toFixed(2).slice(2) : "");
formatCurrency:函数(值){
var d=“.”;
var t=“,”;
var c=2;
var p=“$”;
c=isNaN(c=Math.abs(c))?2:c;
var s=值<0?”-“:”;
var i=parseInt(value=Math.abs(+value | | 0).toFixed(2))+“”;
var j=(j=i.length)>3?j%3:0;
返回p+s+(j?i.substr(0,j)+t:)+i.substr(j).替换(/(\d{3})(?=\d)/g,“$1”+t)+(c?d+Math.abs(value-i).toFixed(2).切片(2):”);
这是我使用的XML片段文件的一部分:

<Label text="Price" />
<ObjectNumber number = "{path : 'model>Price', formatter : '.formatCurrency'}" />

我在某个地方读到,我必须实例化这个片段?我对这个非常陌生,所以我不知道怎么做。我不知道如何将我看到的示例应用到我的案例中

PD:在普通View.xml文件中使用该函数时,效果非常好


任何帮助都将不胜感激。

无论在何处使用,我怀疑绑定中可能存在问题。命名JSON模型中的属性可以这样访问(model>/Price而不是model>Price)-()


以下是使其对我起作用的4个步骤:

创建格式化程序 格式化程序文件在webapp\model中定义

sap.ui.define([],function(){
“严格使用”;
返回{
formatNumber:函数(值){
var结果=”;
如果(值!=“未定义”&&isNumeric(值)){
结果=数量(值).toFixed(2);
}
返回结果;
}
};
});
扩展控制器
sap.ui.define([
“sap/ui/core/mvc/Controller”,
“myapp/html/model/formatter”
],函数(控制器、格式化程序){
“严格使用”;
返回Controller.extend(“myapp.html.Controller”{
格式化程序:格式化程序,
//你的代码
});
});
您可以在代码中看到以下内容:

  • 在define部分添加格式化程序类
  • 扩展函数参数
  • 将格式化程序定义为局部变量,然后可以在视图/片段中引用为。formatter
在片段中使用格式化程序

您可以在代码中看到以下内容:

  • 我有一个名为results的模型,要显示的属性是value(但这取决于您的代码)
  • 它使用扩展的方式定义文本控件文本属性
在视图中包含该片段

当然,在添加属性之前,您应该始终确保在没有格式化程序的情况下显示属性


希望这对您有所帮助

如果您通过javascript调用您的片段,您必须为视图“注册”它(其他绑定如i18n和formatter不起作用):

sap.ui.core.Fragment.load({
键入:“XML”,
名称:'.myFragment'
}).then(函数(用于标记){
this.getView().addDependent(of ragment);
}.约束(这个);
:

if(!this.myFragment){
this.myFragment=sap.ui.core.Fragment.load(.myFragment',this);
this.getView().addDependent(this.myFragment,this);
}
另见文件:


sap.ui.xmlfragment
自v1.58(请参阅:)以来就被弃用。现在我们应该使用
sap.ui.core.Fragment.load
<Label text="Price" />
<ObjectNumber number = "{path : 'model>/Price', formatter : '.formatCurrency'}" />
this.getView().setModel(new sap.ui.model.json.JSONModel({
            Price: 23,
            .. : .., //Other properties in the model
            .. : ..
        }), "model");
sap.ui.core.Fragment.load({
    type: "XML",
    name: '<Namespace>.myFragment'
}).then(function (oFragment) {
    this.getView().addDependent(oFragment);
}.bind(this));
if (!this.myFragment) {
    this.myFragment= sap.ui.core.Fragment.load(<Namespace>.myFragment',this);         
    this.getView().addDependent(this.myFragment, this);
}