我的控制器文件中有一个称为" formatcurrency"的函数,但我无法让我的XML片段使用它。
这是我的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) : "");
这是我正在使用的XML片段文件的一部分:
<Label text="Price" />
<ObjectNumber number = "{path : 'model>Price', formatter : '.formatCurrency'}" />
我在某个地方阅读了我必须实例化片段的地方吗?我真的是新手,所以我不确定该怎么做。我不知道如何将看到的示例应用于我的情况。
pd:在普通view.xml文件中使用时该功能完美工作。
任何帮助将不胜感激。
这是使它对我有用的4个步骤:
创建格式
格式文件是在 webapp model 的中定义的。
。sap.ui.define([], function() {
"use strict";
return {
formatNumber: function(value) {
var result = "";
if (value !== "undefined" && isNumeric(value)) {
result = Number(value).toFixed(2);
}
return result;
}
};
});
扩展控制器
sap.ui.define([
"sap/ui/core/mvc/Controller",
"myapp/html/model/formatter"
], function(Controller, formatter) {
"use strict";
return Controller.extend("myapp.html.controller", {
formatter: formatter,
// your code
});
});
您可以在代码中看到以下内容:
- 在"定义"部分中添加格式类别
- 扩展函数参数
- 将格式化器定义为局部变量,然后可以在您的视图/fragments 中引用为 .formatter
在片段中使用格式
<Text text="{path : 'results>value', formatter : '.formatter.formatNumber'}"/>
您可以在代码中看到以下内容:
- 我有一个名为结果的模型,并且要显示的属性为 value (但这是您的代码(
- 它使用展开来定义 text control text> text attribute
在您的视图中包括片段
<ui:core.Fragment fragmentName="myapp.html.fragment.myfragment" type="XML"/>
OFF课程,您应该始终确保在不格式化之前显示您的属性。
希望这有帮助
不管它使用的位置如何价格( - (UI5属性绑定(
<Label text="Price" />
<ObjectNumber number = "{path : 'model>/Price', formatter : '.formatCurrency'}" />
您是否在Fiori Elements应用程序中使用此片段/进行对话?如果手动使用片段,则必须实例化。更重要的是,您需要确保已使用sap.ui.model.json.JSONModel
this.getView().setModel(new sap.ui.model.json.JSONModel({
Price: 23,
.. : .., //Other properties in the model
.. : ..
}), "model");
如果您通过JavaScript调用片段,则必须"注册"以获取视图(i18n和formatter(例如i18n和formatter(不起作用(:
sap.ui.core.Fragment.load({
type: "XML",
name: '<Namespace>.myFragment'
}).then(function (oFragment) {
this.getView().addDependent(oFragment);
}.bind(this));
自版本1.58以来已弃用:
if (!this.myFragment) {
this.myFragment= sap.ui.core.Fragment.load(<Namespace>.myFragment',this);
this.getView().addDependent(this.myFragment, this);
}
另请参见Docu:
教程的示例
adddependent