Функция форматирования не работает во фрагменте XML - PullRequest
0 голосов
/ 11 мая 2019

В моем файле контроллера есть функция 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.

Любая помощь будет оценена.

Ответы [ 3 ]

2 голосов
/ 13 мая 2019

Вот 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


    });
});

Вы можете увидеть следующее в коде:

  • Добавить класс форматера в разделе определения
  • Расширить аргументы функции
  • Определите форматер как локальную переменную, на которую затем можно ссылаться как .formatter в вашем представлении / фрагменты

Использовать форматер во фрагменте

<Text text="{path : 'results>value', formatter : '.formatter.formatNumber'}"/>

Вы можете увидеть следующее в коде:

  • У меня есть модель с именем результаты и атрибут для отображения значение (но это зависит от вашего кода)
  • Используется расширенный способ определения Text control text attribute

Включить фрагмент в ваше представление

<ui:core.Fragment fragmentName="myapp.html.fragment.myfragment" type="XML"/>

Конечно, вы всегда должны показывать свою собственность без форматера, прежде чем добавлять его.

Надеюсь, это поможет

1 голос
/ 12 мая 2019

Независимо от того, где оно используется, я подозреваю, что в привязке может быть проблема. Свойства в именованных JSON-моделях могут быть доступны следующим образом (модель> / Цена вместо модели> Цена) - ( UI5Привязка свойства )

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

Используете ли вы этот фрагмент в приложении элементов Fiori / для диалога?В случае использования фрагмента вручную его необходимо создать.Что еще более важно, вы должны убедиться, что вы создали экземпляр модели JSON, используя sap.ui.model.json.JSONModel

this.getView().setModel(new sap.ui.model.json.JSONModel({
            Price: 23,
            .. : .., //Other properties in the model
            .. : ..
        }), "model");
0 голосов
/ 13 мая 2019

Если вы вызываете свой фрагмент через javascript, вы должны «зарегистрировать» его для просмотра (в противном случае привязки, такие как 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);
}

См. Также документ:
Пример из учебного пособия
addDependent

...