格式化程序函数没有';不能在XML片段中工作
在我的控制器文件中有一个名为“formatCurrency”的函数,但我无法让XML片段使用它 这是my Controller.js文件中的函数:格式化程序函数没有';不能在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 : 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);
}