格式化程序函数在 XML 片段中不起作用



我的控制器文件中有一个称为" 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

实例化JSON模型
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

最新更新